在C ++中使用CMake(mingw)在C ++中使用CMion进行未定义的Qt5引用

时间:2015-02-04 21:22:20

标签: c++ windows qt clion

我正在尝试新learn Qt5 with CMake CLion C/C++ IDE,我对这些工具相对较新。所以,我有这个真正简单的代码main.cpp

#include <QDebug>
int main() {
    qDebug("Hello World!");
    return 0;
}

我已按照文档操作,并以此CMakeLists.txt

结束
cmake_minimum_required(VERSION 2.8.11)
project(cl_hello_world2)

set(CMAKE_PREFIX_PATH D:/Qt/Qt5.4.0/5.4/msvc2012_opengl)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_VERBOSE_MAKEFILE ON)

find_package(Qt5Widgets)

set(SOURCE_FILES main.cpp)
add_executable(cl_hello_world2 WIN32 ${SOURCE_FILES})

target_link_libraries(cl_hello_world2 Qt5::Widgets)

经过数小时和数小时的尝试后,我发现这些undefined reference错误:

CMakeFiles\cl_hello_world2.dir/objects.a(main.cpp.obj): In function `main':
E:/Qt/test/cl-hello-world2/main.cpp:4: undefined reference to `_imp___ZNK14QMessageLogger5debugEPKcz'

这是CMake正在执行的编译器命令:

D:\PROGRA~2\CODEBL~1\MinGW\bin\G__~1.EXE   -std=c++11 -g    -mwindows -Wl,--whole-archive CMakeFiles\cl_hello_world2.dir/objects.a -Wl,--no-whole-archive  -o cl_hello_world2.exe -Wl,--out-implib,libcl_hello_world2.dll.a -Wl,--major-image-version,0,--minor-image-version,0  D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\Qt5Widgetsd.lib D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\Qt5Guid.lib D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\Qt5Cored.lib D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\qtmaind.lib -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32

我不知道这一行在语法上是否正确,但库D:\Qt\Qt5.4.0\5.4\msvc2012_opengl\lib\Qt5Widgetsd.lib是否存在......

我尝试使用Qt5.3.2和Qt 5.4.0。也许你知道为链接添加库的其他方法,或者我犯了一个错误......

感谢。

1 个答案:

答案 0 :(得分:3)

您的问题是您正在尝试使用ming的Qt Visual Studio构建。你需要使用Qt的mingw构建。

修改

  1. 如果您打算使用MinGW,请在http://www.qt.io/download-open-source/ Qt 5.4.0下载适用于Windows 32位的正确Qt版本(MinGW 4.9.1,852 MB) 。在安装时,不要忘记选择MinGW 4.9.1组件。

  2. 如果您要使用CLion,请执行以下步骤:在文件:设置或Ctrl + Alt + S中,选择正确的MinGW路径,如下所示:

  3. CLion toolchain configuration

    1. CMakeLists.txt 中更改行: 您的Qt路径所在的set(CMAKE_PREFIX_PATH D:/Qt/Qt5.4.0/5.4/msvc2012_opengl)set(CMAKE_PREFIX_PATH D:/Qt/Qt5.4.0MinGw/5.4/mingw491_32)

    2. 现在,如果您从IDE编译并运行,您将收到错误:Process finished with exit code -1073741515 (0xC0000135)。您需要路径中或您的exe所在目录中的Qt库。我不得不在我的目录中复制icudt53.dll icuin53.dll icuuc53.dll libgcc_s_dw2-1.dll libstdc++-6.dll libwinpthread-1.dll Qt5Cored.dll Qt5Guid.dll Qt5Widgetsd.dll(“d”代表“debug”)。

    3. 如果你从CLion运行这个sample code for Qt beginners,你就会得到这个!

    4. Running Qt MinGW and CMake from CLion

      关于我的初始代码我不明白发生了什么,但我无法弄清楚为什么qDebug不会在stdout中打印...