2016-07-05 228 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工具好得多... –