Qt第三方库静态链接(QtSerialPort)

时间:2013-12-12 01:16:43

标签: c++ qt qt4 qtserialport

原来静态链接正在运行,但仅适用于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的。

1 个答案:

答案 0 :(得分:-1)

对于外部库的静态链接,有一些选项,两者都有其优缺点。

予。编译库以进行静态链接。链接到它。

  1. 查找可能存在的静态链接配置​​开关。库中的QTSERIALPORT_STATIC = no文件中可能包含.pro/.pri等内容。只需说yes为库编译静态链接,然后转到第4步!

  2. .pro/.pri文件中将CONFIG += dll替换为CONFIG += static

  3. 从库中删除导出声明。通常,Qt库符号使用某些定义声明,如QTSERIALPORT_EXPORT,在链接时扩展到共享库构建中的Q_DECL_EXPORT/Q_DECL_IMPORT /其头文件用法。您需要找到定义此QTSERIALPORT_EXPORT的位置,并将其替换为空定义:

    #define QTSERIALPORT_EXPORT // in source file
    

    DEFINES += QTSERIALPORT_EXPORT # in .pro/.pri file
    
  4. 构建库。

  5. 链接到库.lib/.a文件,使用库头文件进行项目中的符号声明。
  6. II。将库源文件包含到项目中并在其中编译(完全没有链接)。

    1. 将库的所有源文件包含到项目中(添加到qmake项目文件中的SOURCES

    2. 确定库所依赖的所有内容(其他库,Qt选项等),并将其也包含在.pro文件中。 要么 如果库作者为项目内编译提供(.pri或其他内容),请在.pro中包含正确的include(QtSerialPort.pri)文件。)

    3. 从库源代码中删除导出/导入声明 - 如第I部分第3项所述。

    4. 构建您的项目。