首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MinGW-w64编译Qt5 hello .cpp文件会产生“未定义的引用”错误

使用MinGW-w64编译Qt5 hello .cpp文件会产生“未定义的引用”错误
EN

Stack Overflow用户
提问于 2016-06-28 18:10:40
回答 1查看 1.7K关注 0票数 1

当我运行make来编译cmake生成的Makefile,并编译Qt5应用程序的hello示例时,编译失败并出现以下错误:

为什么编译失败?

(关于我到底想做什么的细节)

我在Windows 10下,使用从Qt官方网站下载的Qt5.5二进制文件、WinBuilds附带的mingw-w64 gccg++,以及从官方网站下载并与Windows win64-x64 Installer一起安装的cmake v3.6。

我正在尝试编译以下hello测试文件,它是用Qt5官方维基提供的

代码语言:javascript
运行
复制
#include <QCoreApplication>

int main(int argc, char *argv[])
{
    QCoreApplication app (argc, argv);

    return app.exec();
}

Makefile是使用命令cmake -G "MinGW Makefiles" ..从包含.cpp文件的目录中名为build的文件夹成功构建的。使用了以下CMakeLists.txt文件(取自Qt5 5的cmake wiki页面,并添加了CMAKE_PREFIX_PATH变量的规范,如本所以贴中讨论的那样,这是必需的):

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 2.8.11)

SET(CMAKE_C_COMPILER C:/WinBuilds/bin/x86_64-w64-mingw32-gcc-4.8.3.exe)
SET(CMAKE_CXX_COMPILER C:/WinBuilds/bin/x86_64-w64-mingw32-g++-4.8.3.exe)

project(testproject)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
#set(CMAKE_PREFIX_PATH "C:/WinBuilds/lib64/cmake")
set(CMAKE_PREFIX_PATH "C:/Qt/5.5/mingw492_32/lib/cmake")

find_package(Qt5Widgets)

add_executable(testfile WIN32 test.cpp)

target_link_libraries(testfile Qt5::Widgets)

(我没有使用Qt5附带的cmake,因为它不起作用)。

现在,当我在由cmake生成的Makefile上运行make (或者更准确地说,是mingw32-make,还是随WinBuilds一起提供的)时,问题就出现了。当我这样做时,编译失败时会出现以下错误(上面的截图中也显示了相同的错误):

代码语言:javascript
运行
复制
CMakeFiles\testfile.dir/objects.a(test.cpp.obj):test.cpp:(.text+0x35): undefined reference to `__imp__ZN16QCoreApplicationC1ERiPPci'
CMakeFiles\testfile.dir/objects.a(test.cpp.obj):test.cpp:(.text+0x3e): undefined reference to `__imp__ZN16QCoreApplication4execEv'
CMakeFiles\testfile.dir/objects.a(test.cpp.obj):test.cpp:(.text+0x50): undefined reference to `__imp__ZN16QCoreApplicationD1Ev'
CMakeFiles\testfile.dir/objects.a(test.cpp.obj):test.cpp:(.text+0x67): undefined reference to `__imp__ZN16QCoreApplicationD1Ev'
c:/winbuilds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\testfile.dir/objects.a(test.cpp.obj): bad reloc address 0xc in section `.xdata'
c:/winbuilds/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
CMakeFiles\testfile.dir\build.make:127: recipe for target 'testfile.exe' failed
mingw32-make[2]: *** [testfile.exe] Error 1
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/testfile.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/testfile.dir/all] Error 2
Makefile:82: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

为什么编译失败?

在另一个所以问题中也报告了类似的未定义引用错误,但原因似乎与目前的情况不同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 19:12:55

问题是当您试图构建64位Qt应用程序时,您正在使用32位混合编译的Qt二进制文件。您需要使用使用mingw编译的64位Qt二进制文件才能工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38083401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档