链接Qt5.6产生错误没有find需要的引用

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

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:undefined reference to`_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

我使用以下命令来链接:

C:\Qt\Qt5.6.0\Tools\mingw492_32\bin\g++.exe -g -LC:\Qt\Qt5.6.0\5.6\mingw49_32\lib -lQt5Widgets -lQt5Core -lQt5Gui -lQt5Cored -lQt5Guid -lQt5Widgetsd -lqtmain -lqtmaind -o build/model/model.exe ./build/model/objects/a.obj ./build/model/objects/b.obj 

我已经添加了一堆库和各种组合。 单独使用Widgets,Core和Gui也没有办法。

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

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

来源(如有兴趣):

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

和编译器命令(如有兴趣):

 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 

我已经尝试了/没有Qt符号。

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

有关:

  • Windows下使用MinGW-w64编译Qt5 hello world .cpp文件给出了“未定义引用”错误
  • C ++ Qt:未定义的引用`_imp___ZN12QApplicationC1ERiPPci'
  • 在Windows下使用MinGW-w64编译Qt5 hello world .cpp文件给出了“未定义引用”错误
  • http://www.qtcentre.org/archive/index.php/t-34997.html
  • Qt5链接错误

任何帮助,高度赞赏。

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

  1. 使用qmake为您的项目生成一个Makefile。

  2. 确保它建立。

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

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

最后,没有Qt这样的没有qmake的东西,所以不使用qmake是愚蠢的。 如果你依赖于Qt,那么假设qmake不在那里,那么你就不会轻易做出任何事情:你的项目将会使用Qt提供的许多其他二进制工具,所以给qmake一个特殊的地位只会浪费你的时间。 如果你的项目将会很大,你可以通过使用cmake和Ninja生成器来节省大量的编译时间,因为qmake目前被卡住,生成递归的Makefiles,并且这导致了糟糕的构建性能。