【发布时间】:2020-11-27 22:07:59
【问题描述】:
我正在静态链接一个 QT 应用程序,但由于某种原因,当我打开可执行文件时,我收到了缺少 dll 的错误。
基本上我正在链接以下库:
### LINKER FLAGS ###
LDFLAGS = -LC:/Qt/5.15.0/mingw81_32/lib
LDLIBS = -lQt5Widgets -lQt5Gui -lQt5Core
当我静态链接所有内容时,为什么会因为缺少 dll 而出现错误?
编译和链接正确通过,还生成了可执行文件..我不知道为什么它需要 dll。
编辑:
缺少 dll:
libgcc_s_dw2-1.dll,
libstdc++-6.dll,
Qt5Code.dll,
Qt5Widgets.dll
【问题讨论】:
-
我刚刚意识到一些非常奇怪的事情。实际可执行文件的大小非常小 - 333kb。这怎么可能?我希望所有这些静态库至少有几 MB。
-
显然,对于 Qt5Core 和 Qt5Widgets 您正在链接动态版本。如果您在 dir 中有静态和动态版本,当遇到
-l${LIB}时,链接器将默认选择动态版本。要覆盖它,请指定库名称 - 例如:libQt5Core.a。对于其他人,将-static-libstdc++ -static-libgcc标志传递给链接器。 -
我改成了:LDLIBS = libQt5Widgets.a libQt5Gui.a libQt5Core.a -static-libgcc -static-libstdc++。但是现在找不到libQt5Widgets.a,libQt5Gui.a,libQt5Core。即使它们在 LDFLAGS = -LC:/Qt/5.15.0/mingw81_32/lib 中。
-
如果通过完整路径指定它们会发生什么?另外我不确定 -LC:/Qt/5.15.0/mingw81_32/lib 是否有效(因为冒号)。
-
那么你只有动态构建的 Qt 库。