【问题标题】:Linker errors when trying to compile Qt application in the CLI on Windows尝试在 Windows 上的 CLI 中编译 Qt 应用程序时出现链接器错误
【发布时间】:2016-07-07 18:12:22
【问题描述】:

我有一个简单的 Qt 应用程序,我试图在 Windows 上在 Qt 的“Qt 5.5 64-bit for Desktop (MSVC 2013)”提示符下编译,并执行 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 中编译,没有任何问题。

【问题讨论】:

    标签: c++ windows visual-studio qt


    【解决方案1】:

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

    【讨论】:

    • 那么如何添加路径以及在哪里添加?当我在 Ubuntu qmake && make 上编译时,使用相同的项目文件就足够了……为什么不在 Windows 上?我已经在使用 Qt 的快捷方式到应该设置所有环境变量的命令提示符。
    • 它在 Windows 下不起作用,因为 Windows 有时很奇怪 ;-) 查看 Qt/bin 文件夹是否在您的 PATH 变量中。 Btw:为什么不用Visual Studio在Windows下编译呢?
    • 为什么要使用 Visual Studio? Qt Creator 是 Qt 开发的最佳 IDE,无论如何这都是一个 CLI 应用程序。我的应用程序已经在 Qt Creator 中运行,所以我不明白 Visual Studio 会有什么不同。 Qt 的 bin 文件夹位于 PATH 中,因为就像我说的那样,我正在使用 Qt 的快捷方式到设置了所有环境变量的命令提示符。
    【解决方案2】:

    在用 CMake 尝试这个之后,我终于意识到原来的问题是什么(CMake 给出了一个明确的错误):我在没有 amd64 参数的情况下调用了 vcvarsall.bat,因此链接器尝试使用带有32-bit 工具链。当然,像往常一样,由此产生的错误令人困惑。

    我又执行了:

    vcvarsall.bat amd64 
    

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

    在 Linux 上,一切都比较稳定,因为一切都默认为 64 位,并且不会发生此类事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多