原来静态链接正在运行,但仅适用于Qt库。我的第三方库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 打开/mpecpec/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的。
答案 0 :(得分:-1)
对于外部库的静态链接,有一些选项,两者都有其优缺点。
予。编译库以进行静态链接。链接到它。
查找可能存在的静态链接配置开关。库中的QTSERIALPORT_STATIC = no
文件中可能包含.pro/.pri
等内容。只需说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
文件,使用库头文件进行项目中的符号声明。II。将库源文件包含到项目中并在其中编译(完全没有链接)。
将库的所有源文件包含到项目中(添加到qmake项目文件中的SOURCES
)
确定库所依赖的所有内容(其他库,Qt选项等),并将其也包含在.pro
文件中。
要么
如果库作者为项目内编译提供(.pri
或其他内容),请在.pro
中包含正确的include(QtSerialPort.pri)
文件。)
从库源代码中删除导出/导入声明 - 如第I部分第3项所述。
构建您的项目。