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

awp*_*t13 5 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
Run Code Online (Sandbox Code Playgroud)

QMAKE_CLFAGS_RELEASE = -O2 -MT
Run Code Online (Sandbox Code Playgroud)

然后我打开MSVC2010命令提示符并cd到此.然后我输入命令

configure -static -release -platform win32-msvc2010
nmake sub-src
Run Code Online (Sandbox Code Playgroud)

完成此操作后,我打开我的项目并添加

CONFIG += static
Run Code Online (Sandbox Code Playgroud)

到.pro文件.在QtCreator中,然后我进入项目,管理工具包然后进入Qt版本并浏览到我刚刚生成的qMake.我在这个版本的qMake中添加了一个新工具包.然后我清理所有并切换到这个新工具包并从QtCreator运行qmake.然后我使用msvc2010命令提示符转到生成文件的目录然后

nmake release
Run Code Online (Sandbox Code Playgroud)

这会产生一个相当大的.exe,但就像我说的那样,它仍然取决于一对.dll的.

Dmi*_*kin -1

对于外部库的静态链接,有几种选择,两者都有其优点和缺点。

\n\n

I. 自己编译静态链接库。链接到它。

\n\n
    \n
  1. 寻找可能的现有静态链接配置​​开关。QTSERIALPORT_STATIC = no库文件中可能有诸如等之类的内容.pro/.pri。只需说yes要编译静态链接库并转到步骤 4!

  2. \n
  3. .pro/.pri文件中替换CONFIG += dllCONFIG += static.

  4. \n
  5. 从库中删除出口声明。通常,Qt 库符号是用一些定义来声明的,例如在链接时QTSERIALPORT_EXPORT扩展到Q_DECL_EXPORT/Q_DECL_IMPORT共享库构建/其头文件使用情况。您需要找到QTSERIALPORT_EXPORT定义它的位置并将其替换为空定义:

    \n\n
    #define QTSERIALPORT_EXPORT // in source file\n
    Run Code Online (Sandbox Code Playgroud)\n\n

    或者

    \n\n
    DEFINES += QTSERIALPORT_EXPORT # in .pro/.pri file\n
    Run Code Online (Sandbox Code Playgroud)
  6. \n
  7. 建立图书馆。

  8. \n
  9. 链接到库.lib/.a文件,使用库头文件在项目中进行符号声明。
  10. \n
\n\n

二. 将库源文件包含到您的项目中并在其中编译它们(根本不链接)。

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

  2. \n
  3. 确定该库依赖的所有内容(其他库、Qt 选项等)并将其也包含到您的文件中。\n或者\n如果库作者提供了该文件用于项目内编译(即或其他东西).pro,则将正确的.pri文件包含到您的文件中.).proinclude(QtSerialPort.pri)

  4. \n
  5. 如第 I 部分第 3 项所述,从库源代码 \xe2\x80\x94 中删除导出/导入声明。

  6. \n
  7. 构建您的项目。

  8. \n
\n