记录我第一次在Windows11下使用cmake编译成功Qt + gRPC/Protobuf C++代码(借助AI)
代码由gpt编写以及推荐编译方式,编译过程中的错误由豆包解决。
目录结构大致如下
├─device
│ ├─agent
│ │ └─systemd
│ ├─eye_cam_service
│ └─imu_service
├─docs
├─generated
│ └─control
│ └─v1
├─pc_app
│ └─generated
├─proto
│ ├─control
│ │ └─v1
│ └─pchub
│ └─v1
├─tools
└─vr_app
第一步首先下载vcpkg,使用vcpkg安装gRPC/Protobuf(可能是弯路)
#找一个文件放vcpkg
git clone https://github.com/microsoft/vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg install grpc:x64-windows protobuf:x64-windows
在git clone https://github.com/microsoft/vcpkg时出现了一些问题,由于默认使用的端口与我的端口不一致所以一直无法下载,找了一段时间,然后再powershell下修改
# 第一步:设置正确的(替换成你的实际端口,比如7890)
# 寻找端口
$env:HTTP_PROXY = "127.0.0.1:7899"
$env:HTTPS_PROXY = "127.0.0.1:7899"
# 第二步:重新执行vcpkg安装命令
.\vcpkg install grpc:x64-windows protobuf:x64-windows
然后等待将近半个小时
在powershell中直接运行
cmake -S pc_app -B build_pc -A x64 -DCMAKE_TOOLCHAIN_FILE=D:\vcpkg\scripts\buildsystems\vcpkg.cmake -DQt6_DIR="D:\Qt\6.9.2\msvc2022_64\lib\cmake\Qt6"
出错,错误核心是:CMake 生成器选错了(默认用了 NMake Makefiles),且这个生成器不支持-A x64指定平台,同时编译器(MSVC)未正确配置—— 简单说就是 CMake 没找到合适的编译工具链,也不识别指定的 x64 平台参数。
使用正确的生成器和开发者命令行,按下 Windows 开始键,搜索:x64 Native Tools Command Prompt for VS 2022(对应MSVC 2022),然后却换到正确的目录中去。执行
cmake -S pc_app -B build_pc ^
-G "Visual Studio 17 2022" ^
-DCMAKE_TOOLCHAIN_FILE=D:\vcpkg\scripts\buildsystems\vcpkg.cmake ^
-DQt6_DIR="D:\Qt\6.9.2\msvc2022_64\lib\cmake\Qt6"
之后需要清除之前的cmake内容
rmdir /s /q E:\Users\Y1984\Desktop\VR-EyeTracking\build_pc
但是由于cmake中没有自动编译gRPC/Protobuf生成c++代码的脚本,所以出现错误:Unknown CMake command "grpc_generate_cpp"
修改cmake之后但是出现另外的问题,cmake无法主动生成,所以手动做了生成gRPC/Protobuf C++代码
切换到 proto 文件所在目录
# 切换到 proto 文件所在目录
cd /d E:\Users\Y1984\Desktop\VR-EyeTracking\proto\pchub\v1
# 执行手动生成命令
# 用vcpkg的protoc生成Protobuf代码
D:\vcpkg\installed\x64-windows\tools\protobuf\protoc.exe ^
--proto_path=. ^
--cpp_out=E:\Users\Y1984\Desktop\VR-EyeTracking\pc_app\generated ^
pchub.proto
# 用vcpkg的grpc_cpp_plugin生成gRPC代码
D:\vcpkg\installed\x64-windows\tools\protobuf\protoc.exe ^
--proto_path=. ^
--grpc_out=E:\Users\Y1984\Desktop\VR-EyeTracking\pc_app\generated ^
--plugin=protoc-gen-grpc=D:\vcpkg\installed\x64-windows\tools\grpc\grpc_cpp_plugin.exe ^
pchub.proto
# --proto_path=.:指定 proto 文件所在目录(当前目录);
# --cpp_out:Protobuf 代码输出目录(放到 pc_app 下的 generated 文件夹);
# --grpc_out:gRPC 代码输出目录(和 Protobuf 同目录);
# --plugin:指定 grpc_cpp_plugin 的路径(vcpkg 安装的)。
然后修改CMakeLists.txt(适配手动生成的代码)
由于Qt 项目编译的核心配置缺失导致的链接错误,出现“无法解析的外部符号” 本质是 Qt 的 MOC(元对象编译器)没运行,没有生成MainWindow/GrpcServer的元对象代码(比如metaObject/qt_metacall),同时GrpcServer的槽函数 / 信号函数声明 / 实现不匹配。
然后修改了CMakeLists.txt。之后重新编译
# 1. 删除旧的build_pc目录
rmdir /s /q E:\Users\Y1984\Desktop\VR-EyeTracking\build_pc
# 2. 重新配置CMake
cmake -S pc_app -B build_pc -G "Visual Studio 17 2022" -DCMAKE_TOOLCHAIN_FILE=D:\vcpkg\scripts\buildsystems\vcpkg.cmake -DQt6_DIR="D:\Qt\6.9.2\msvc2022_64\lib\cmake\Qt6"
# 3. 重新编译
cmake --build build_pc --config Release
在./build_pc下寻找/release文件夹,把Qt的dll运行时库复制进去,然后执行.exe文件,但是又出现错误
Qt6 的 DLL(D:\Qt\6.9.2\msvc2022_64\bin):
Qt6Core.dll、Qt6Widgets.dll
Qt6Gui.dll、Qt6Network.dll(如果项目用到网络)
Qt6Svg.dll(如果有 UI 用到 SVG,可选)
Qt6Multimedia.dll(如果用到多媒体,可选)
Qt6OpenGL.dll(如果用到 OpenGL,可选)
# 错误
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
# 核心原因是Qt 的平台插件(qwindows.dll)没和 exe 放在一起,导致程序找不到 Windows 平台的界面渲染插件。
打开Qt的命令行工具
# 按下 Windows 开始键,搜索:Qt 6.9.2 (MSVC 2022 64-bit)(和 Qt 版本匹配),打开对应的命令行窗口。
cd /d E:\Users\Y1984\Desktop\VR-EyeTracking\build_pc\Release
windeployqt pc_app.exe
# 执行后,工具会自动拷贝:
# Qt 核心 DLL(Qt6Core.dll、Qt6Widgets.dll 等);
# 平台插件(生成platforms文件夹,里面包含qwindows.dll);
# 其他依赖的插件(如 imageformats、styles 等)。
# 也可以,如果不想用 windeployqt,可手动拷贝插件:
# 找到 Qt 的 platforms 目录:D:\Qt\6.9.2\msvc2022_64\plugins\platforms;
# 把整个platforms文件夹拷贝到pc_app.exe同目录(即Release目录下);
# 确保platforms里有qwindows.dll(这是核心)。
顺利执行!

写下来看似步骤很少,但是花了我半天时间,学习为主吧
更多推荐




所有评论(0)