首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++ 17 std::文件系统无法在其他(windows 10)计算机上运行

c++ 17 std::文件系统无法在其他(windows 10)计算机上运行
EN

Stack Overflow用户
提问于 2022-07-15 14:51:46
回答 3查看 206关注 0票数 2

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

通常情况下,这很容易。

我只包含了任何第三方库的exe文件和dll文件,而且它确实工作.除非我使用一个特定的c++标准库,<filesystem>库来自c++ 17,在这种情况下,我的程序只能在编译的计算机上运行。

例如,此程序只打印当前在某个文件中的文件。

代码语言:javascript
复制
#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编译它:

代码语言:javascript
复制
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.0版g++.exe (MinGW.org GCC Build-2) 9.2.0

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-07-15 17:43:48

你有没有检查过

代码语言:javascript
复制
libstdc++-6.dll

是可用的,或者静态地包含相关的库( static linked libs )。

票数 1
EN

Stack Overflow用户

发布于 2022-07-16 07:56:23

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

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

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

将得到的dll与您的程序一起发布。

我正在使用mingw32的最新版本

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

我会推荐MSYS2代替。

票数 2
EN

Stack Overflow用户

发布于 2022-07-15 17:17:39

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

MinGW-w64可以同时瞄准Windows 32位和64位.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72995844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档