我知道这可能是一个与许多其他问题类似的问题,但在搜索多次并未找到明确有效的解决方案后,我不得不问这个问题。
我正在使用 Qt 5.2.0 for Windows 32-bit (VS 2010, 570 MB),我已经编写好了程序。但现在我想将它分发为 .exe 文件,为了避免复杂性和不必分发 dll 文件,我需要使用静态链接构建程序。
请问如何使 Qt 5.2.0 for Windows 32-bit (VS 2010, 570 MB) 使用静态链接构建整个程序?
谢谢。
我知道这可能是一个与许多其他问题类似的问题,但在搜索多次并未找到明确有效的解决方案后,我不得不问这个问题。
我正在使用 Qt 5.2.0 for Windows 32-bit (VS 2010, 570 MB),我已经编写好了程序。但现在我想将它分发为 .exe 文件,为了避免复杂性和不必分发 dll 文件,我需要使用静态链接构建程序。
请问如何使 Qt 5.2.0 for Windows 32-bit (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兼容,也不使用Qt商业许可证,则不允许静态链接。在选择方法之前最好确定一下这个问题。LIBS
变量,例如:将您的静态库路径与库名称一起传递给它,就像这样:LIBS += -L/path/to/the/static/library -lstaticlibraryname
请注意,传递给-l
参数的静态库名称不应包含静态库扩展名,例如在Windows上的.lib
。
作为一种备选方案,您始终可以静态链接其他库,并将Qt dll文件放置在可执行文件旁边,并将文件夹部署为“软件包”。这可能是您采取的更简单的方式。
static
和staticlib
都不起作用。 - Youda008-static-runtime
,可能还会静态链接到语言运行时。所选择的Qt构建的参数决定了使用该特定Qt构建构建的项目的情况。不需要CONFIG += static
,这是一个无操作。 - Kuba hasn't forgotten Monica