Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用MinGW-w64在Windows下编译Qt5 hello world.cpp文件会给出;“未定义引用”;错误_C++_Windows_Qt_Makefile_Cmake - Fatal编程技术网

C++ 使用MinGW-w64在Windows下编译Qt5 hello world.cpp文件会给出;“未定义引用”;错误

C++ 使用MinGW-w64在Windows下编译Qt5 hello world.cpp文件会给出;“未定义引用”;错误,c++,windows,qt,makefile,cmake,C++,Windows,Qt,Makefile,Cmake,当我运行make编译由cmake生成的Makefile,编译Qt5应用程序的hello world示例时,编译失败,出现以下错误: 为什么编译失败? (下面是我要做的事情的详细信息) 我在Windows 10下,使用从下载的Qt5.5二进制文件,mingw-w64gcc和g++随附,以及cmakev3.6从下载并与Windows win64-x64安装程序一起安装 我正在尝试编译以下hello world测试文件,在中提供: (我没有使用Qt5附带的cmake,因为它不起作用) 现在,当我在

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

为什么编译失败?

(下面是我要做的事情的详细信息)


我在Windows 10下,使用从下载的Qt5.5二进制文件,mingw-w64
gcc
g++
随附,以及
cmake
v3.6从下载并与
Windows win64-x64安装程序一起安装

我正在尝试编译以下hello world测试文件,在中提供:

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

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

为什么编译失败?


另一个报告了类似的未定义引用错误,但原因似乎与当前情况不同。

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

您确定正式的Qt-5.5下载有64位mingw编译的二进制文件吗?我以为他们只为mingw提供了32位二进制文件。@drescherjm谢谢,我没想到会有32位版本的Qt5。这很可能就是问题所在。在Qt的文件夹树下有
mingw492_32
文件夹,这可能意味着我确实有一个32位的Qt发行版(尽管这个文件夹下的gcc和g++似乎根本不起作用)。你知道有什么简单的方法可以检查编译Qt的体系结构吗?我会用你想用于应用程序的编译器来构建Qt本身。然而,构建
Qt
需要1小时左右的时间。配置起来并不难。您将需要python、perl和ruby来构建。我使用rubyinstaller提供的perl、python和ruby的ActiveState版本。@drescherjm好吧,这太烦人了。。。但是通过查看Qt的wiki(上)中的相关页面,我越来越确信这正是我所面临的问题。在第二个链接的wiki页面上有一个链接,可以下载使用mingw64编译的Qt5.6二进制文件,我现在正在下载,并将报告结果。我还尝试使用32位MinGW进行编译。这样做不会导致编译错误,但会导致打开生成的可执行文件时出错。这可能是另一个问题的材料。@drescherjm我确认这确实是问题所在。我下载了使用中提供的mingw64编译的Qt5.6二进制文件,现在它可以工作了(尽管问题中的简单.cpp代码没有任何作用,正如预期的那样,在工作中使用以下示例)!谢谢!如果你给我一个答案,我会接受的。除此之外,我是使用中提供的mingw64的二进制文件来完成这项工作的。更具体地说,使用Qt 5.6的二进制文件可在此处下载:。我现在还意识到WinBuilds本身带有用于Qt5.3的64位二进制文件,但由于某种缺陷(引用问题),这些文件似乎也不起作用。
#include <QCoreApplication>

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

    return app.exec();
}
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)
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