【发布时间】:2013-09-26 22:43:12
【问题描述】:
我一直在将 Visual Studio 2012 用于 Qt/C++ 项目。
我正在尝试迁移到 MinGW,以便我可以完全使用 C++11,而不是 MSFT 编译器提供的部分支持。使用 CMake 生成项目并制作非常顺利,编译了所有子项目和主项目本身。
但是,链接给了我一些错误,我不知道如何解决它们:
链接 CXX 可执行文件 Owl.exe CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x1e): 对
__imp__ZN9QTreeViewC2EP7QWidget' CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x7b): undefined reference to_imp_ZN9QTreeViewD2Ev' 的未定义引用 CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x116): 对__imp__ZNK17QAbstractItemView5modelEv' CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x1a1): undefined reference to_imp_ZNK18QStandardItemModel9findItemsERK7QString6QFlagsIN2Qt9MatchFlagEEi' 的未定义引用 CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x303): 对__imp__ZN8QVariantD1Ev' CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x350): undefined reference to_imp_ZeqRK7QStringS1_'的未定义引用 CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x53e): 对__imp__ZN8QVariantD1Ev' CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x649): undefined reference to_imp_ZNK9QTreeView10indexBelowERK11QModelIndex' 的未定义引用 CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x669): 未定义对__imp__ZNK17QAbstractItemView5modelEv' CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x6b1): undefined reference to_imp_ZN17QAbstractItemView15setCurrentIndexERK11QModelIndex' 的引用 CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x6c1): 对__imp__ZN8QVariantD1Ev' CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):BoardTreeView.cpp:(.text+0x6d6): undefined reference to_imp_ZN8QVariantD1Ev' 的未定义引用 c:/progra~1/mingw-~1/x64-48~1.1-p/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../ ../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\Owl.dir/objects.a(BoardTreeView.cpp.obj):错误的重定位地址 `.text$_ZNSt9exceptionC2Ev[_ZNSt9exceptionC2Ev]' 部分中的 0xf collect2.exe:错误:ld 返回 1 退出状态 Deltas\CMakeFiles\Owl.dir\build.make:1217:目标配方 'Deltas/Owl.exe' 失败 mingw32-make[2]: * [Deltas/Owl.exe] 错误 1 CMakeFiles\Makefile2:435:目标配方 'Deltas/CMakeFiles/Owl.dir/all' 失败 mingw32-make[1]: [Deltas/CMakeFiles/Owl.dir/all] 错误 2 Makefile:115: 配方 目标 'all' 失败 mingw32-make: ** [all] 错误 2
使用 Visual Studio(和 Xcode、FWIW)可以很好地编译和链接项目,所以我不确定链接器缺少什么。
谁能给点建议?
【问题讨论】:
-
建议:不要使用 MinGW 编译器,它真的很糟糕。您可以自己对 MinGW 进行基准测试并将其与免费的 Visual Studio Express(任何版本)进行比较,您将看到 Visual Studio Express 至少有 200% 的性能提升。
-
我昨天花了很大一部分时间试图让 Qt5 使用 64 位 MinGW 构建。当我看到构建 WebKit 的步骤时,我最终放弃了。我坚持使用 Visual Studio,只需要等待 MSFT 完成 C++11 支持。