2015-11-25 69 views
0

我正在開發一個小型且應該便攜的項目(對於Windows)。我看到MinGW擺脫了目標系統上某些.dll的需求,所以我想我會試試看。令我驚奇的是,當我嘗試在朋友的計算機上運行我的程序時,出現了兩個錯誤,表示有2個不同的.dll文件丟失。我以爲MinGW使用了系統DLL,但它顯然不起作用。我看到一篇關於如何使用Visual Studio創建獨立exe的文章,但我更喜歡使用MinGW,因爲它很簡單。C++ - 如何使用MinGW獨立編譯程序?

所以我的問題:如何使用MinGW生成獨立的exe文件?

注:我只使用標準庫,但很高興知道如何爲未來的項目包含其他庫。

如果你想要一個獨立exe文件的例子,putty就是一個很好的例子(它是Windows的ssh客戶端)。

回答

1

您需要的兩個庫很可能是libgcc_s_sjlj-1.dlllibstdc++-6.dll或這些的一些變體,這取決於您的mingw在構建時如何配置。這些是C和C++標準庫實現。

如果您需要,您可以在鏈接最終可執行文件-static-libgcc-static-libstdc++時將額外的標誌傳遞給編譯器,這會導致它以靜態方式鏈接這些庫,而不是要求您使用可執行文件爲它們分發DLL 。

此處瞭解詳情:Mingw libgcc_s_sjlj-1.dll is missing

一般來說,你可以總是試圖靜態鏈接庫到可執行。這些特殊的-static-libgcc標誌是僅由mingw提供的特殊標誌,不是由其他編譯器提供的,也不適用於其他庫,因此對其他庫使用不同的-static語法。靜態鏈接很好,但隨着依賴關係變得更加複雜,它變得更加複雜和容易出錯。靜態鏈接有一些與庫鏈接順序相關的缺陷。在某個點之後,它通常更簡單,以使它們全部共享並且不執行任何靜態鏈接。這取決於你的項目有多複雜/如果你開始有問題。