原来静态链接是有效的,但只适用于 Qt 库。我的第 3 方库 QtSerialPort 没有静态链接。经过一些研究,我发现我要么必须静态构建这个库,要么必须直接链接到我的 .pro 文件中的 .pri 文件。
我不确定该怎么做,因为 QtSerialPort 似乎不是为静态链接设计的。
.pri方法我实在是看不懂,已经在这两个链接里模糊的描述了: http://qt-project.org/forums/viewthread/15223 http://www.qtcentre.org/archive/index.php/t-54505.html
有没有人对如何使这些方法中的任何一种起作用有任何建议?或者可能是另一种方法?
此外,如果有人可以给我任何建议,MSVCP100.dll 不会静态链接。
============================================= ===================================
我试图让 Qt 静态链接库,这样我就可以制作一个独立的应用程序。我遵循了各种关于如何静态构建 Qt 然后构建静态应用程序的教程,但我运气不佳。我相信我已经成功地使用静态链接构建了 Qt,因为该应用程序的大小已从 79KB 增长到 7+MB,但我仍然收到错误消息,指出缺少 QtCore4.dll 和 QtSerialPort.dll。此外,我在使用此静态配置时遇到的另一个问题(不太严重)是,当我关闭我的程序时,Windows 认为它已崩溃并给我一个窗口,显示 MyProgram.exe 已停止工作...
我在使用 MSVC 2010 和 Qt 4.8.5 的 Windows 机器上使用第三方库 QtSerialPort。
根据我一直在阅读的指南,我所做的是:
下载并解压qt-everywhere-opensource-src-4.8.5.zip 打开/mkspec/mwin32-msvc2010/qmake.conf 并将以下行更改为
CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target
和
QMAKE_CLFAGS_RELEASE = -O2 -MT
然后我打开 MSVC2010 命令提示符并 cd 到这个 .然后我输入命令
configure -static -release -platform win32-msvc2010
nmake sub-src
完成后我打开我的项目并添加
CONFIG += static
到 .pro 文件。在 QtCreator 中,我然后进入项目、管理工具包,然后进入 Qt 版本并浏览到我刚刚生成的 qMake。我用这个版本的 qMake 添加了一个新的工具包。然后我清理所有并切换到这个新工具包并从 QtCreator 运行 qmake。然后我使用msvc2010命令提示符转到生成文件的目录,然后
nmake release
这会生成一个相当大的 .exe,但正如我所说,它仍然依赖于几个 .dll。
最佳答案
对于外部库的静态链接,有两种选择,各有利弊。
我。自己编译用于静态链接的库。链接到它。
为静态链接寻找可能的现有配置开关。在库的
.pro/.pri
文件中可以有类似QTSERIALPORT_STATIC = no
等内容。只需说yes
就可以为静态链接编译库并转到第 4 步!在
.pro/.pri
文件中,将CONFIG += dll
替换为CONFIG += static
。从库中删除导出声明。通常,Qt 库符号使用一些定义来声明,例如
QTSERIALPORT_EXPORT
,它在共享库构建中扩展为Q_DECL_EXPORT/Q_DECL_IMPORT
/链接时使用其头文件。您需要找到此QTSERIALPORT_EXPORT
的定义位置并将其替换为空定义:#define QTSERIALPORT_EXPORT // in source file
或
DEFINES += QTSERIALPORT_EXPORT # in .pro/.pri file
构建库。
- 链接到库
.lib/.a
文件,在您的项目中使用库头文件进行符号声明。
二。将库源文件包含到您的项目中并在其中编译它们(根本没有链接)。
将库的所有源文件包含到你的项目中(在qmake项目文件中添加到
SOURCES
)确定库所依赖的所有内容(其他库、Qt 选项等)并将其也包含到您的
.pro
文件中。 要么 如果库作者为项目内编译提供了正确的.pri
文件,请将其包含到您的.pro
中(即include(QtSerialPort.pri)
或其他东西。)从库源代码中删除导出/导入声明——如第 I 部分第 3 项所述。
构建您的项目。
关于c++ - Qt 第 3 方库静态链接 (QtSerialPort),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20533240/