You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win10下CMake编译Qt5 HelloWorld的链接错误与无输出问题修复咨询

解决Win10下CMake编译Qt5 HelloWorld的两类问题

一、修复x86/x64架构冲突与QCoreApplication链接错误

问题原因

  1. CMakeLists.txt中Qt路径使用单反斜杠,被CMake解析为转义字符,导致无法正确定位Qt库
  2. CMake生成的工程架构(x86)与Qt安装版本(msvc2019_64,x64)不匹配
  3. CMakeLists.txt指令顺序错误,查找Qt包前未设置路径,导致链接时找不到Qt符号

解决步骤

  • 修正Qt路径的转义问题:将路径中的单反斜杠改为双反斜杠或正斜杠,避免转义错误
    # 正确写法二选一
    set(CMAKE_PREFIX_PATH "C:\\Qt\\5.15.14\\msvc2019_64")
    # 或
    set(CMAKE_PREFIX_PATH "C:/Qt/5.15.14/msvc2019_64")
    
  • 调整CMakeLists.txt指令顺序:先设置Qt路径、查找Qt包,再创建可执行文件并链接库,完整示例:
    set(CMAKE_PREFIX_PATH "C:/Qt/5.15.14/msvc2019_64")
    find_package(Qt5 REQUIRED COMPONENTS Core)
    
    add_executable(main main.cpp)
    target_link_libraries(main PRIVATE Qt5::Core)
    
  • 确保CMake生成x64架构工程:
    • 命令行编译时,指定x64生成器:
      cmake .. -G "Visual Studio 16 2019" -A x64
      
    • 使用CMake GUI时,Configure步骤选择"Visual Studio 16 2019"并勾选x64架构

二、修复main.exe无"hello world"输出问题

问题原因

std::cout的输出默认会缓冲,而QCoreApplication启动事件循环后,缓冲未被及时刷新,导致输出无法显示

解决步骤

在输出语句后添加刷新操作,强制输出缓冲内容,修改后的main.cpp:

#include <iostream>
#include <QCoreApplication>

int main(int argc, char **argv) {
    QCoreApplication a(argc, argv);
    std::cout << "hello world" << std::endl; // 用endl刷新缓冲
    return a.exec();
}

或者手动调用flush:

std::cout << "hello world";
std::cout.flush();

内容的提问来源于stack exchange,提问作者milanHrabos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:05:18