链接Qt5.6会产生错误,无法找到所需的引用

时间:2017-04-12 05:31:06

标签: c++ windows qt makefile linker

我正在尝试使用Qt GUI扩展现有的makefile C ++项目(Qt 5.6.0因为我不能依赖Cxx11功能)。问题是我无法让Qt正确链接。我想在Win7(x86-64)下构建一个X86应用程序(32位)。我已经安装了从Qt下载页面https://download.qt.io/archive/qt/5.6/5.6.0/获得的qt-opensource-windows-x86-mingw492-5.6.0.exe。一切都在编译。但是,链接会产生以下错误:

  

C:/sofit/inuit_workspace/inuit_development/tools/makefiles/inuit/MakefileCatenaISS.mk:145:   目标配方' build / model / model.exe'失败

     

C:/sofit/inuit_workspace/inuit_development/tools/inuit/inuit.cpp:175:   未明确引用`_imp ___ ZN12QApplicationC1ERiPPci'

     

C:/sofit/inuit_workspace/inuit_development/tools/inuit/inuit.cpp:176:   未定义的引用   `_imp ___ ZN7QWidgetC1EPS_6QFlagsIN2Qt10WindowTypeEE'

     

C:/sofit/inuit_workspace/inuit_development/tools/inuit/inuit.cpp:180:   未定义的引用`_imp ___ ZN7QWidget4showEv'

     

C:/sofit/inuit_workspace/inuit_development/tools/inuit/inuit.cpp:181:   未定义的引用`_imp ___ ZN12QApplication4execEv'

     

C:/sofit/inuit_workspace/inuit_development/tools/inuit/inuit.cpp:307:   未定义引用`_imp ___ ZN12QApplicationD1Ev'

     

C:/sofit/inuit_workspace/inuit_development/tools/inuit/inuit.cpp:307:   未定义引用`_imp ___ ZN12QApplicationD1Ev'

     

collect2.exe:错误:ld返回1退出状态

     

make:*** [build / model / model.exe]错误1

我使用以下命令链接:

int main(int argc, char *argv[])
    QApplication app(argc, argv);
    QWidget *widget = new QWidget;
    Ui_MainWindow ui;
    widget->show();
    return app.exec();
}

我添加了一堆库和各种组合。仅仅使用Widgets,Core和Gui也没有做到这一点。

针对相关问题(见下文)的答案中确定的潜在原因 - 不匹配的体系结构lib /编译器 - 缺少-lQt5Widgets

但是,我不认为这适用于此。请注意,我没有使用CMake或QMake(因此没有.pro文件或CMake文件) - 只需在Eclipse Mars中调用简单的Gnu make。

来源(如果感兴趣):

C:\Qt\Qt5.6.0\Tools\mingw492_32\bin\g++.exe -IC:\Qt\Qt5.6.0\5.6\mingw49_32\include -IC:/my_project -Wall -g -c -DWIN32 -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT   C:/my_project/1.cpp  -o C:/my_project/build/model/objects/1.obj

编译器命令(感兴趣的话):

db.collectionsname.findAndModify({
    query: { 'status':0 },
    sort: { 'timestamp': -1 },
    limit: 10,
    remove: true
});

我已尝试使用/不使用Qt符号。

有谁知道可能是什么问题?

相关:

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

只有一种方法可以让它工作而不会浪费很多时间:

  1. 使用qmake为项目生成Makefile。

  2. 确保构建。

  3. 如果需要,可根据需要清理Makefile。

  4. 当您更改源时,您当然可以使用qmake继续重新生成Makefile。您要发现的主要问题是手动维护makefile是一种巨大的痛苦,因为您还需要维护依赖项列表,并且需要递归扫描每个翻译单元所包含的文件。换句话说,无论您自己想出什么Makefile,都无法在修改项目时正确重建项目。因此,您将在开发过程中放弃Makefile的好处。大多数手动生成的Makefile严重缺乏每个源文件的正确依赖关系 - 因为没有人会理智地手动维护它,一旦你自动维护它,你也可以使用qmake或cmake来完成这项工作。

    最后,没有Qt这样的东西没有qmake,所以不使用qmake是愚蠢的。如果你依赖于Qt的,你'再不做任何通过假装QMAKE ISN&#39变得更容易;吨有:你的项目将使用Qt提供反正很多其他二进制工具,所以给人QMAKE特殊的地位会浪费你的时间。如果您的项目将是很大的,你'会通过使用cmake与忍者发电机,而不是节省大量的编译时间,因为QMAKE目前滞留产生递归Makefile文件,以及那些导致构建性能不佳