我有一个简单的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中编译而没有任何问题。
答案 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位,这些事情都不会发生。