今天我致力于在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
中引用
我做错了什么?帮助解决这个问题。
答案 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。