QT静态库静态编译

Posted

技术标签:

【中文标题】QT静态库静态编译【英文标题】:QT Static Library Static Compilation 【发布时间】:2017-04-14 02:33:56 【问题描述】:

我的任务是在没有安装 Qt 的计算机上的 Windows 项目中使用我的库。所以我想用静态链接的 Qt 代码编译我的库。

我不明白如何将我自己的代码编译到静态库,静态链接所有 Qt 的东西,在其中使用。我已经下载了 Qt 的源代码并使用 msvc 2015 对其进行了静态编译(QT 5.8.0),并在 Qt Creator 中添加了新的静态 qmake。我尝试构建我的库,它成功了,但是在没有安装 Qt 的其他计算机上使用它时,会出现许多链接器错误 LNK2001LNK2019

这是一个错误示例:

Error LNK2019 Unresolved External Symbol "public: int __thiscall
QJsonValue::toInt(int)const " (?toInt@QJsonValue@@QBEHH@Z) in function
"public: int __thiscall QJsonValueRef::toInt(void)const "
(?toInt@QJsonValueRef@@QBEHXZ)  ConsoleApplication2 c:\Users\Alex\documents\visualstudio
2015\Projects\ConsoleApplication2\ConsoleApplication2\TcpClient.lib(tcpthreadpart.obj)

所以,据我了解,所有 Qt 源都没有链接到我的库。互联网上有一些指南如何使用 qt 的静态链接编译.exe,我已经尝试过它们来编译我的库,但它失败了。你能帮忙吗?

【问题讨论】:

【参考方案1】:

库本身必须是动态库,因为这是现有工具可以与任何东西链接的唯一类型。当您针对静态 Qt 构建该库时,该库将按照您的意愿静态使用 Qt。

看起来您已经构建了一个静态库,因此没有“链接”到任何东西。从技术上讲这是可能的,但是没有工具可以做到这一点:(

【讨论】:

以上是关于QT静态库静态编译的主要内容,如果未能解决你的问题,请参考以下文章

QT 静态编译

QT交叉编译时怎么添加静态库,急!!!

关于Qt程序中动态和静态的几点总结

QT for Android怎样设置静态编译

如何将qt静态库代码还原动态库

Qt 5.9.3 如何静态编译和部署?