2016-07-05 221 views
1

我有一個Windows 7 64位系統,最新的MinGW(32位)與Qt 5.5 SDK(也是32位)一起安裝,它也附帶了它自己的MinGW。由於我不是唯一使用該系統的人,所以我無法刪除獨立的MinGW。缺少libgcc_s_dw2-1.dll

我的項目使用qmake,並且是一個純C項目(不是C++)。一切都很好,但是當我嘗試在命令行中執行我的二進制文件時,由於系統上缺少libgcc_s_dw2-1.dll,導致應用程序無法啓動。

在調查了這個問題之後,我發現獨立的MinGW和Qt SDK一起提供了一個提到的DLL。

  • 獨立的MinGW - libgcc_s_dw2-1.dll位於bin子目錄MinGW的安裝,其中二進制文件所在(gccg++gdb等)
  • 的Qt MinGW的內部 - libgcc_s_dw2-1.dll位於內部C:\Qt\Tools\mingw492_32\i686-w64-mingw32\lib子目錄而MinGW組件的二進制文件在C:\Qt\Tools\mingw492_32\i686-w64-mingw32\bin之內。

我想知道如何正確設置我的PATH變量,以便:

  • 應用程序正常啓動
  • 沒有使用獨立的MinGW安裝發生衝突

只是一個旁註:我已經在SO上查看了其他帖子,但無法找到解決方案(也許我錯過了它)。我也試過LIBS += -static,但結果是一樣的。

回答

0

你只需要這個DLL你的可執行文件複製,即:

cp <path-to-qt-install-dir>\qt5.7.0\5.7\mingw53_32\bin\libgcc_s_dw2-1.dll <path-to-dest-dir>

你墊發現你有其他的依賴,就看你有其他DEPS你可以使用:ldd <your-executable>。你只需要通過你可以看到這些Qt的特定的dll複製:

ldd <executable> | grep -i qt

您可以靜態地將其鏈接:像-static-libgcc-static 連接器的命令,但我想你開始打LGPL的問題,也可能需要從源靜態編譯qt - 無法記住這個特定的文件。

注2

對不起LDD是Linux,只是意識到你有窗戶,在這種情況下,你可以使用一個或兩個:

  • 的Dependency Walker:from here

  • <path-to-qt-bin-folder>\windeployqt.exe <path-to-your-executable>

我的結果與windeployqt混合在一起,但是如果你有任何插件,它的安靜性對於獲得該部分的排序很有幫助。

+1

與libgcc和libstdC++靜態鏈接不是這裏的方式:無論如何Qt鏈接到DLL,所以你仍然有依賴,並且最重要的是,你現在必須編譯運行時和C++標準庫在您的應用程序,與他們可能的全球狀態混淆。 – rubenvb

+1

另請注意,MSYS2環境帶有一個Windows'ldd',它非常方便。 – rubenvb

+0

@rubenvb - 是的,我已經離開了後期的靜態鏈接...關於Windows上的LDD(酷)你有鏈接嗎? (它在哪裏) - 我發現linux工具好得多... –