代码由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(这是核心)。

顺利执行!

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐