【问题标题】:Undefined Qt5 references in C++ using CMake (mingw) in Windows with CLion在 C++ 中使用 CMake (mingw) 在 C++ 中未定义的 Qt5 引用和 CLion
【发布时间】:2016-01-01 00:28:49
【问题描述】:

我正在尝试在新的CLion C/C++ IDE 中使用learn Qt5 with CMake,我对这些工具比较陌生。所以,我有这个真正简单的代码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。也许您知道添加链接库的其他方法,或者我犯了一个错误......

谢谢。

【问题讨论】:

  • 您不能将 Visual Studio 二进制文件用于 mingw。使用 mingw 构建的 Qt。
  • 哦,谢谢!我没有注意到...我会寻找 Qt 的 mingw 构建
  • @drescherjm 请添加您的评论作为答案,我会接受它......也许我会在您的答案中添加一些编辑以澄清我遇到的一些问题。非常感谢。

标签: c++ windows qt clion


【解决方案1】:

您的问题是您正在尝试将 Qt 的 Visual Studio 版本与 mingw 一起使用。您需要使用 mingw 构建的 Qt。

编辑

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

  2. 如果要使用 CLion,请按照此步骤操作:在 File : Settings 或 Ctrl + Alt + S 中,选择正确的 MinGW 路径,如图所示:

  1. CMakeLists.txt 中更改以下行: set(CMAKE_PREFIX_PATH D:/Qt/Qt5.4.0/5.4/msvc2012_opengl) 你的 Qt 路径在哪里: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,你会得到这个!

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

【讨论】:

  • 澄清:qDebug 不会在标准输出中打印,因为这不是控制台应用程序,请参阅add_executable(cl_hello_world2 WIN32 ${SOURCE_FILES}) WIN32 标签是为非控制台应用程序定义的
猜你喜欢
  • 2022-01-12
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
相关资源
最近更新 更多