4、QGC地面站源码编译:克隆QGC源码,配置Qt5.15环境,解决常见编译错误,编译运行QGC
好,到了真正动手的环节了。前面几章我们把概念和工具链捋了一遍,现在要开始跟代码打交道。说实话,QGC的编译环境配置,是很多初学者第一个卡住的地方。我当年第一次搞的时候,光Qt版本就折腾了两天。嗯,咱们今天争取一次搞定。
4.1 克隆QGC源码
先得把代码拉下来。QGC的官方仓库在GitHub上,地址是:https://github.com/mavlink/qgroundcontrol.git。
我个人习惯用SSH方式克隆,省得每次输密码。如果你还没配SSH Key,用HTTPS也行。打开终端,找个你喜欢的目录,执行:
git clone https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol
这里有个小细节——QGC的代码量不小,大概有几百兆。网速慢的话,建议用 --depth=1 参数只拉最新版本:
git clone --depth=1 https://github.com/mavlink/qgroundcontrol.git
git checkout Stable 或者 git tag -l 看看最新的稳定版标签。
4.2 配置Qt 5.15环境
QGC官方推荐用Qt 5.15.x LTS版本。为什么不是Qt 6?因为QGC对Qt 6的支持还在完善中,很多插件和模块在Qt 6下会有兼容问题。说白了,用5.15最稳。
安装步骤分三步走:
- 下载Qt安装器:去Qt官网(qt.io)下载在线安装器。注意,Qt现在要求注册账号,免费版够用。
- 选择组件:安装时,一定要勾选
Qt 5.15.2下的MSVC 2019 64-bit(Windows)或Desktop gcc 64-bit(Linux/macOS)。另外,Qt Charts和Qt Serial Port这两个模块必须选上,不然编译会报错。 - 配置编译器:安装完后,打开Qt Creator,在「工具 → 选项 → Kits」里确认编译器路径正确。Windows用户记得装好MSVC 2019或2022的Build Tools。
qcustomplot 的报错上,查了半天才发现是图表模块没装。所以,安装时多花两分钟检查组件列表,能省后面两小时。
4.3 解决常见编译错误
编译QGC,说白了就是打开 qgroundcontrol.pro 文件,然后点「构建」。但现实往往没那么顺利。我把最常见的几个错误和解决办法列出来:
| 错误信息 | 原因 | 解决办法 |
|---|---|---|
Qt Charts module not found |
未安装Qt Charts模块 | 重新运行Qt安装器,勾选Qt Charts |
GL/gl.h: No such file or directory |
缺少OpenGL开发库 | Linux: sudo apt install libgl1-mesa-devWindows: 安装MSVC时勾选Windows SDK |
undefined reference to `vtable for ...` |
Q_OBJECT宏未正确识别 | 执行 qmake 重新生成Makefile,然后清理重建 |
fatal error: 'Esri/...' file not found |
ArcGIS地图插件编译失败 | 在 .pro 文件中注释掉 DEFINES += QGC_ENABLE_ARCGIS |
你想想看,这些错误其实都有规律。大部分是环境依赖没配全。我建议第一次编译时,用 qmake 加 make 的命令行方式,错误信息更直观:
mkdir build
cd build
qmake ../qgroundcontrol.pro
make -j4
核心要点:如果编译过程中出现大量红色错误,别慌。先看第一个错误,往往后面的都是连锁反应。我一般会先 make clean,然后重新 qmake,再 make。八成问题能解决。
4.4 编译运行QGC
编译成功后,你会得到一个可执行文件。Windows下是 qgroundcontrol.exe,Linux下是 qgroundcontrol。直接双击运行,或者从终端启动:
./qgroundcontrol
第一次启动时,QGC会创建配置文件目录(一般在 ~/.config/QGroundControl.org)。你可能会看到一些警告日志,比如缺少某些地图缓存目录,这些不影响使用。
为了验证编译是否完全正确,我建议做三个快速测试:
- 界面检查:主窗口是否正常显示,菜单栏、工具栏、状态栏是否完整。
- 模拟连接:点击右上角的「Q」图标,选择「模拟模式」。QGC会启动一个虚拟无人机,看看状态数据是否在刷新。
- 参数加载:进入「参数」页面,检查是否有默认参数列表。如果参数为空,说明MAVLink通信模块有问题。
netstat -an | grep 14550 看看端口状态。我遇到过好几次,是之前残留的QGC进程没关干净。
4.5 本章知识体系
下面这张图,把整个编译流程串起来了。你对照着看,心里就有谱了:
嗯,到这一步,你的QGC地面站就已经从源码跑起来了。后面几章,我们会在这个环境里做更深入的调试和二次开发。今天先到这里,你动手试试看,有问题随时翻回来看这张流程图。