c++ 如何使Qt和Qtcreator静态链接库,而不是动态?

参见英文答案 > Qt static linking and deployment                                    4个
我知道这可能是一个类似于许多其他问题的问题,但是经过多次搜索,没有得到一个明确有效的解决方案,我不得不提出这个问题.

我使用Qt 5.2.0 for Windows 32位(VS 2010,570 MB),而且我已经做了我的编程,而这一切都完成了.但现在我想将它作为.exe文件分发给我的同事,但是要做到这一点,而不会出现并发症,并且避免分发dll文件,我需要使用静态链接构建程序.

你能描述我如何使用Windows 32位的Qt 5.2.0(VS 2010,570 MB)使用静态链接构建整个程序?

谢谢.

最佳答案
您可以使用与qmake的CONFIG变量:

CONFIG += static

要么

CONFIG += staticlib

但是,您需要确保您拥有希望捆绑的所有库,可以静态使用.

这包括Qt框架本身,如果你遵守许可证这样做.官方安装只设置动态库(.dll文件),因此您需要自行构建Qt才能实现此目的.

您可以使用以下命令静态构建Qt,以达到您自己的目的:

configure -developer-build -opensource -nomake examples -nomake tests -static
qmake -r
nmake

请注意,一般来说,当您建立第三方Qt软件时,您最好使用以下参数调用qmake以正确传递您的环境:

qmake -r -spec win32-msvc2010 

还请注意,如Frank和ManuelH在评论中写道,如果您的应用程序不是免费许可LGPL或至少与LGPL兼容,则也不允许静态链接,也不对Qt使用商业许可.最好在拿起你的方法之前确保这一点.

一旦完成,您可以以常规方式使用LIBS变量,如:将静态库的路径与库名称一起传递给它,因此这样做:

LIBS += -L/path/to/the/static/library -lstaticlibraryname

请注意,传递给-l参数的静态库名称不应包含静态库扩展名,例如Windows上的.lib.

作为回退,您可以随时静态链接其他库,并将Qt dll文件放在可执行文件旁边,并将该文件夹部署为“包”.这可能是你走的更简单的方法.

转载注明原文:c++ 如何使Qt和Qtcreator静态链接库,而不是动态? - 代码日志