如何使用Visual Studio Qt加载项构建静态库?

时间:2015-12-16 13:37:50

标签: visual-studio qt

我在Visual Studio中使用QT实现了一些可重用的对话框,并将它们编译为静态库以供重用。 当我使用静态QT时,我工作得很好。 现在我必须构建使用WebKit的应用程序,所以我切换到基于DLL的QT。我的静态库现在无法链接。我收到2个错误:

error LNK2005: "public: __cdecl QString::~QString(void)" (??1QString@@QEAA@XZ) already defined in Qt5Cored.lib(Qt5Cored.dll)
error LNK2001: unresolved external symbol "public: static struct QArrayData const * const QArrayData::shared_null" (?shared_null@QArrayData@@2QBU1@B)

看起来QT生成的某些函数是内联的,它们出现在静态库中。有没有解决方法?另一个开源库(例如libxml)使用预处理器定义来定义我们是使用静态库还是动态库。 QT中有类似的东西吗? 我在Visual Studio 2013中使用QT(通过官方插件),因此我没有.pro文件,我可以手动编辑QT设置。

1 个答案:

答案 0 :(得分:0)

我找到了问题的根源。这是QT Visual Studio 2013加载项错误。工作原理:

  1. 从QT Creator导入pro文件到QT Visual Studio加载项项目时,它会导入绝对路径。 I. e。它为静态QT包含目录添加了绝对路径。
  2. 现在,当您将Visual Studio QT设置中的QT版本从静态版本更改为动态版本时,它根本不会影响导入的项目,因为它使用绝对路径。
  3. 当我用相对于$(QTDIR)的绝对路径替换绝对路径时,它开始编译得很好。