Qt中的静态链接 - > VS 2008中的链接错误

时间:2010-04-24 18:20:33

标签: visual-studio-2008 qt static linker-errors

今天我致力于在Qt中进行静态链接。我使用了Qt4 with Visual Studio and static C runtime文章。第三步花了很长时间。完成后我在VS 2008中打开了我的项目,Build->Clean Solution并尝试Release。不幸的是我收到链接错误:

  

警告   LNK4098:defaultlib'libcmt.lib'   与使用其他图书馆的冲突;使用   / NODEFAULTLIB:library

     

错误LNK2019:未解析的外部   符号“private:static struct   QString :: Data QString :: shared_null“   (?shared_null @ @@的QString @ 0UData 1 @ A)   在函数“public中引用:   __thiscall QString :: QString(void)“(?? 0QString @@ QAE @ XZ)

     

错误LNK2019:未解析的外部   符号“private:static struct   的QByteArray ::数据   的QByteArray :: shared_null”   (?shared_null @ @@的QByteArray @ 0UData 1 @ A)   在函数“public中引用:   __thiscall QByteArray :: QByteArray(void)“   (?? 0QByteArray @@ QAE @ XZ)

     

错误LNK2001:未解析的外部符号   “private:static struct   的QByteArray ::数据   的QByteArray :: shared_null”   (?shared_null @ QByteArray @@ 0UData @ 1 @ A)

     

错误LNK2001:   未解决的外部符号“public:   static struct QMetaObject const   声明QDialog :: staticMetaObject”   (?staticMetaObject @ @@ QDialog的@@ 2UQMetaObject B)

     

错误LNK2001:   未解决的外部符号“public:   static struct QMetaObject const   声明QDialog :: staticMetaObject”   (?staticMetaObject @ QDialog @@ 2UQMetaObject @@ B)

     

错误LNK2001:   未解决的外部符号“public:   static struct QMetaObject const   声明QDialog :: staticMetaObject”   (?staticMetaObject @ QDialog @@ 2UQMetaObject @@ B)

     

错误LNK2019:未解析的外部符号“public:static enum QSysInfo :: WinVersion const QSysInfo :: WindowsVersion”(?WindowsVersion @ QSysInfo @@ 2W4WinVersion @ 1 @ B)在函数_WinMain @ 16

中引用

我做错了什么?帮助解决这个问题。

3 个答案:

答案 0 :(得分:1)

您可以发布用于配置和构建Qt的命令行吗?在构建Qt时,您是否收到任何错误或重大警告?我建议不要更改.conf文件中的任何内容,除非您确定自己在做什么。你正在做的事情真的不应该是需要的。我还建议下载Windows源代码发行版的新副本,或者如果您仍然拥有该归档文件,请执行全新的解压缩,以确保您没有来自上一版本的任何可能未正确的剩余文件。除去。然后,执行configure和nmake。

答案 1 :(得分:0)

确保在重新编译Qt后在您自己的Qt项目上重新运行qmake。构建标志也需要在项目中更新。

答案 2 :(得分:0)

这些说明适用于VS2005。你得到的警告是针对lib多线程静态C运行时库。就个人而言,我不会在qmake.conf中将这些值从-MD更改为-MT和-MDd更改为MTd。我会原样离开他们。无论如何,如果您使用的是Visual Studio解决方案,则必须转到C ++编译器选项并将这些lib设置更改为MT和MTd。