C++ 使用MinGW编译独立Qt应用程序

C++ 使用MinGW编译独立Qt应用程序,c++,windows,qt,dll,mingw,C++,Windows,Qt,Dll,Mingw,我正在尝试构建一个独立的Qt应用程序,不需要任何DLL。我以静态方式重新编译了Qt5.4.1。当我编译和运行应用程序时,它不需要任何Qt dll,而是需要libgcc_s_dw2-1.dll。在配置和构建Qt之前,我还编辑了我的MKSpec,我编辑了以下值: QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport -static -static-libgcc QMAKE_CXXFLAGS = -pipe -fno-k

我正在尝试构建一个独立的Qt应用程序,不需要任何DLL。我以静态方式重新编译了Qt5.4.1。当我编译和运行应用程序时,它不需要任何Qt dll,而是需要libgcc_s_dw2-1.dll。在配置和构建Qt之前,我还编辑了我的MKSpec,我编辑了以下值:

QMAKE_CFLAGS            = -pipe -fno-keep-inline-dllexport -static -static-libgcc
QMAKE_CXXFLAGS          = -pipe -fno-keep-inline-dllexport -static -static-libgcc -static-libstdc++
(添加了-static-staticlibstdc++和-staticlibgcc)

我还添加了一个QMAKESPECS环境变量。 当我使用Qt构建一些东西时,我总能在输出中看到这些选项,因此我确信mkspec正在应用。 当我使用这些选项(-static-static libgcc-static libstdc++)构建一个非Qt程序时,运行它时不需要任何DLL

有人能帮我吗?
我使用Qt5.4.1和MinGW-w64 4.9.2,现在我解决了我的问题。问题是,尽管我编辑了变量QMAKE_cxflags,但在链接应用程序本身时,它仍然动态链接标准库,因为在编译的最后一步中它没有使用这个变量。我只是再次编辑了mkspec,并在变量QMAKE_LIBS中添加了-static选项,现在它可以工作了,我有一个独立的Qt应用程序。

这些选项应该可以阻止
libgcc__dw2-1.dll
,因此很可能是您的主可执行文件或某些外部dll没有选择此标志。你能使用像dependency walker这样的工具来查看哪个dll/可执行文件完全依赖于这个dll吗?@RudolfsBundulis我现在试图在dependency walker中查看它,但似乎只有程序本身依赖于libgcc,尽管我在编译时使用了上面提到的参数。。它不依赖于Qt以外的任何其他库。我正在编译的程序非常简单,只有几行代码。我甚至没有在程序中使用任何标准库(只有Qt使用),我不确定你所说的libgcc是什么意思——你提到的确切的dll还是其他什么?您还应该使用dependency walker和可能的Qt插件查看Qt dll(如果您使用任何插件),以确定哪个文件正确加载了所提到的dll。编译应用程序本身时,是否将静态库作为链接器标志传递?