提问者:小点点

C 17 std::f系统不能在其他(windows 10)计算机上运行


我有一个程序,在Windows 10上使用MinGW编译,我希望这个程序在其他人的计算机上运行,即使他们没有安装MinGW或任何c编译器。

通常,这很容易。

我只包含任何第三方库的exe文件和dll文件,它确实有效…除非我使用一个特定的c标准库,否则

例如,此程序仅将其当前所在的文件打印到文件中。

#include<fstream>
#include<filesystem>

using namespace std;
int main(int argc, char* argv[])
{
    ofstream OUT("location.txt");
    OUT<<filesystem::current_path()<<endl;
    OUT.close();
    return 0;
}

我使用mingw32编译它:

g++ stupid_program.cpp -o stupid_program.exe -std=c++17 -O2 -Wall -Wextra -Wpedantic

这确实适用于进行编译的Windows 10计算机,从终端运行(或双击. exe)文件以创建包含当前执行位置的文件。

但是,如果我将此. exe文件移动到另一台没有编译它的windows 10计算机上,现在双击.exe文件会导致出现错误弹出窗口,告诉我在DLL-库C:\PATH_TO_PROGRAM\stupid_program.exe中找不到入口点_ZNKSt10filesystem7_cxx114path5_list13_impl_deletercIEPN"_5_ImpIE

但是文件系统库没有任何. dll文件,因为它是标准库的一部分。我知道文件系统是标准的最新添加…但是我确实包含了参数-std=c 17,这应该已经解决了。

那么,我有没有办法让一个使用文件系统库的程序在其他Windows 10计算机上运行,而不是编译它的计算机?

g是版本9.2.0g. exe(MinGW.orgGCCBuild-2)9.2.0

注意,有一个旧的bug,旧的MinGW版本为g 8. xx,文件系统库无法编译,这不是它,因为bug完全阻止编译;这个凸轮编译和运行,只是在编译计算机上


共3个答案

匿名用户

运行ntldd-Rmy_program. exe获取程序依赖的dll列表。

查看编译器的bin目录,并将任何匹配的DLL复制到与. exe相同的目录中。忽略NTLDD报告的路径,只查看.dll文件名。忽略编译器未附带的任何dll(如果您不使用第三方库)。

然后再次运行它,确认没有从编译器的bin目录加载任何其他内容。

将生成的dll与您的程序一起发布。

[我正在使用]最新版本的mingw32

有许多不同的MinGW发行版,您使用的不是最好的发行版。它提供了一个过时的GCC(9. x vs 12.x),AFAIK仍然不支持多线程。

我推荐MSYS2。

匿名用户

你检查过那个

libstdc++-6.dll

是否可用或相关库被静态包含静态链接库

匿名用户

尝试使用更新的MinGW-w64而不是旧的MinGW。您可以在https://winlibs.com/找到最近的独立版

MinGW-w64可以针对Windows 32位和64位。

相关问题