我有一个Windows 7 64位系统,安装了最新的MinGW(32位)以及Qt 5.5 SDK(再次是32位),它也附带了自己的MinGW。由于我不是唯一使用该系统的人,因此我无法删除独立的MinGW。
我的项目正在使用qmake
,是一个普通的 C 项目(不是C++)。一切正常,但是当我尝试在命令行中执行二进制文件时,由于系统上缺少libgcc_s_dw2-1.dll
,应用程序无法启动。
在调查了这个问题之后,我发现独立的MinGW和与Qt SDK一起提供的MinGW都有提到的DLL。
-
独立 MinGW -
libgcc_s_dw2-1.dll
位于 MinGW 安装的bin
子目录中,二进制文件所在的位置(gcc
、g++
、gdb
等) -
Qt MinGW -
libgcc_s_dw2-1.dll
位于子目录中C:QtToolsmingw492_32i686-w64-mingw32lib
而MinGW组件的二进制文件位于C:QtToolsmingw492_32i686-w64-mingw32bin
内。
我想知道如何正确设置我的PATH
变量,以便:
- 应用程序正常启动
- 不会与独立的MinGW安装发生冲突
只是一个旁注:我已经在SO上检查了其他帖子,但无法找到解决方案(也许我错过了)。我也尝试过LIBS += -static
但结果是一样的。
你只需要用你的可执行文件复制这个dll,即:
cp <path-to-qt-install-dir>qt5.7.05.7mingw53_32binlibgcc_s_dw2-1.dll <path-to-dest-dir>
发现你有其他的依赖关系,看看你还有哪些其他的部门可以使用:ldd <your-executable>
。您只需要复制 qt 特定的 dll,您可以通过以下方式查看这些:
ldd <executable> | grep -i qt
注意
您可以将其静态链接到:链接器命令,如 -static-libgcc
或 -static
,但我认为您开始遇到 LGPL 问题,并且您可能需要从源代码静态编译 qt - 无法回忆起这个特定文件。
注2
抱歉,ldd 适用于 linux,刚刚意识到您有 Windows,在这种情况下,您可以使用以下一个或两个:
依赖沃克:从这里
<path-to-qt-bin-folder>windeployqt.exe <path-to-your-executable>
我对 windeployqt 的结果好坏参半,但如果您有任何插件,它非常适合对该部分进行排序。