【问题标题】:Qt move constructor linking errorQt移动构造函数链接错误
【发布时间】:2013-06-04 09:54:24
【问题描述】:

我正在尝试使用 Qt 4.8.4 在 Visual Studio 2010 中编译一个项目。

当我构建它时,我会收到如下链接器错误:

error LNK2001: external symbol "__declspec(dllimport) public: class QByteArray & __thiscall QByteArray::operator=(class QByteArray &&)" (__imp_??4QByteArray@@QAEAAV0@$$QAV0@@Z) not resolved
error LNK2001: external symbol "__declspec(dllimport) public: class QString & __thiscall QSTring::operator=(class QString &&)" (__imp_??QString@@QAEAAV0@$$QAV0@@Z) not resolved

您可以在链接器中看到移动构造函数,但我没有使用任何 C++11 功能。

链接器错误出现在我编写如下代码的文件中:

QByteArray xTmpArray;
QString    xString;
...
xTmpArray = xString.toAscii();

如果我注释分配行,链接错误就会消失(与 QString 分配相同)。

如何消除这些链接错误?

【问题讨论】:

    标签: c++ visual-studio qt c++11 linker


    【解决方案1】:

    我已经解决了。这(自然)是一个链接问题,因为他们给了我用 Visual Studio 2008 编译的库,不支持移动构造函数。我用的是正确的版本,用VS2010编译,一切正常。

    【讨论】:

      【解决方案2】:

      我写了这段代码:

      #include <QString>
      #include <QByteArray>
      
      int main() {
          QString s("a");
          QByteArray ba = s.toAscii();
          return 0;
      }
      

      我正在用命令编译它:

      g++ -I /usr/include/qt4/QtCore/ -I/usr/include/qt4/ qtuse.cpp -lQtCore -o qtuse
      

      我没有问题。看起来您忘记将您的程序与 QtCore 链接。

      检查您的项目设置。您应该将 Qt 的 lib 目录添加到链接路径。

      【讨论】:

      • 谢谢,但我使用的是 Visual Studio,而不是 g++。该项目似乎正确链接,自从从 4.8.0 切换到 4.8.4 后我遇到了这个问题(因为项目负责人的上帝决定更新更好)。我实际上是在链接 qtmain.lib、QtCore4.lib、QtGui4.lib。
      • 你有没有尝试编译上面的程序?
      【解决方案3】:

      Microsoft Visual Studio 2015 中转至:

      (Project properties)->General->Platform Toolset
      

      并将其设置为visual studio 2013 (v120)

      这对我有用:)

      【讨论】:

        【解决方案4】:

        当 MSVC 和预构建的 Qt 二进制文件之间存在版本不匹配时,会发生此错误。不要那样做。

        如果您使用的是 MSVC2015,则需要链接到预构建的 MSVC2015 Qt 库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-31
          • 2020-05-06
          • 2011-05-22
          • 1970-01-01
          相关资源
          最近更新 更多