簡體   English   中英

c++ 17 std::filesystem 不能在其他(windows 10)計算機上運行

[英]c++ 17 std::filesystem can not run on other (windows 10) computer

我有一個程序,在 Windows 10 上使用 MinGW 編譯,我希望這個程序在其他人的計算機上運行,​​即使他們沒有安裝 MinGW 或任何 c++ 編譯器。

通常,這很容易。

我只包含任何第三方庫的 exe 文件和 dll 文件,它確實有效……除非我使用一個特定的 c++ 標准庫,即 c++ 17 中的<filesystem>庫,在這種情況下,我的程序只能運行在進行編譯的計算機上。

例如,該程序僅將當前所在的文件打印到文件中。

#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

這確實適用於進行編譯、從終端運行(或雙擊 .exe)文件以創建包含當前執行位置的文件的 Windows 10 計算機。

但是,如果我將此 .exe 文件移動到另一台未編譯它的 Windows 10 計算機,雙擊 .exe 文件現在會導致出現錯誤彈出窗口,告訴我在 DLL 庫中找不到入口_ZNKSt10filesystem7_cxx114path5_list13_impl_deletercIEPN"_5_ImpIE C:\PATH_TO_PROGRAM\stupid_program.exe

但是文件系統庫沒有任何 .dll 文件,因為它是標准庫的一部分。 我知道文件系統是標准的最新補充......但我確實包含了參數-std=c++17並且應該已經解決了這個問題。

那么有什么方法可以制作一個程序,它使用文件系統庫,在其他一些 Windows 10 計算機上工作,而不是編譯它的計算機?

g++ 是版本 9.2.0 g++.exe (MinGW.org GCC Build-2) 9.2.0

請注意,舊版 MinGW 的 g++ 版本 8.xx 存在一個舊錯誤,其中文件系統庫無法編譯,不是這樣,因為該錯誤完全阻止了編譯; 此 cam 僅在編譯計算機上編譯和運行

運行ntldd -R my_program.exe以獲取您的程序所依賴的 dll 列表。

查看編譯器的bin目錄,並將任何匹配的 DLL 復制到與 .exe 相同的目錄中。 忽略 NTLDD 報告的路徑,只查看 .dll 文件名。 忽略編譯器未附帶的任何 dll(如果您不使用第三方庫)。

然后再次運行它,確認沒有從編譯器的 bin 目錄中加載任何其他內容。

將生成的 dll 與您的程序一起發送。


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

有許多不同的 MinGW 發行版,而您使用的那個並不是最好的。 它提供過時的 GCC(9.x 與 12.x),AFAIK 仍然不支持多線程。

我會推薦MSYS2

你檢查過

libstdc++-6.dll

是否可用或相關庫是靜態包含的靜態鏈接庫

嘗試使用更新的 MinGW-w64 而不是舊的 MinGW。 您可以在https://winlibs.com/找到最新的獨立版本

MinGW-w64 可以針對 Windows 32 位和 64 位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM