尝试在Windows上的CLI中编译Qt应用程序时链接器错误

时间:2016-03-21 09:46:21

标签: c++ windows visual-studio qt

我有一个简单的Qt应用程序,我试图在Qt" Qt 5.5 64位for Desktop(MSVC 2013)"中尝试在Windows上编译。提示vcvarsall.bat执行。

qmake -version

QMake version 3.0
Using Qt version 5.5.1 in C:/Qt/5.5/msvc2013_64/lib

在我的.pro文件中,我没有什么特别的,只有源和标题,并且:

QT += xml
QT -= gui

当我:

qmake

nmake

它编译得很好,但在链接时我遇到了很多错误:

foo.obj : error LNK2019: unresolved external symbol  "__declspec(dllimport
) public: class QJsonValue __thiscall QJsonObject::value(class QString
const &)const "(__imp_?value@QJsonObject@@QBE?AVQJsonValue@@ABVQString@@@Z) 
referenced in function ...

当我在Qt Creator中编译它时,这个应用程序编译并运行正常,所以在尝试在CLI中编译它时我缺少什么?

它也可以在Ubuntu的shell中编译而没有任何问题。

2 个答案:

答案 0 :(得分:0)

这是因为链接器找不到DLL。您必须为链接器指定dll的位置。在Qt Creator中,DLL由Qt版本的路径指定。 您应该将所需的Qt DLL路径添加到命令

答案 1 :(得分:0)

在尝试使用CMake后,我终于意识到原来的问题是什么(CMake对此给出了明确的错误):我调用了vcvarsall.bat而没有amd64参数,所以链接器试图使用{{ 1}}具有64-bit工具链的库。当然,由此产生的错误像往常一样令人困惑。

我再次执行:

32-bit

...我能够使用vcvarsall.bat amd64 在Qt的命令提示环境中编译和链接qmake和CMake。

在Linux上,事情会更稳定,因为一切都默认为64位,这些事情都不会发生。