第2章 QGC安装与编译:Windows/Linux/Mac环境搭建、源码编译、常见编译错误解决

说实话,QGC(QGroundControl)的安装编译,是很多初学者第一道坎。我记得第一次接触这个项目时,光环境配置就折腾了两天。但别怕,这东西说白了就是一套标准流程——你只要按步骤来,基本不会出大问题。

这一章,我会把Windows、Linux、Mac三个平台的搭建方法都过一遍。重点放在Windows和Ubuntu上,因为这是绝大多数开发者的选择。Mac用户也别急,流程大同小异。

核心要点:QGC基于Qt框架开发,使用CMake构建系统。无论哪个平台,核心依赖都是Qt 5.15.x + GCC/Clang/MSVC + 一些系统库。搞定了这三样,编译就成功了一大半。

2.1 环境准备:你需要什么?

先列个清单,看看你电脑上缺什么。我个人习惯在开始前先检查一遍,免得编译到一半才发现少东西。

组件 版本要求 说明
Qt框架 5.15.x(推荐5.15.2) QGC核心UI框架,必须安装Desktop组件
CMake ≥3.16 构建系统,用于生成Makefile或项目文件
编译器 GCC 9+ / MSVC 2019+ / Clang 12+ 根据平台选择,C++17支持是硬性要求
Git ≥2.20 拉取源码和子模块
Ninja(可选) ≥1.10 加速编译,比Make快不少

我的建议:Qt版本千万别用6.x。QGC目前对Qt6的支持还不完善,我试过一次,编译过了但运行时各种诡异崩溃。老老实实用5.15.2,这是官方推荐的稳定版本。

2.2 Windows环境搭建

Windows用户最多,问题也最多。我先把流程走一遍,然后重点说几个坑。

2.2.1 安装Qt

  1. 去Qt官网下载Qt Online Installer(或者用国内镜像,快很多)
  2. 安装时选择Qt 5.15.2 → MSVC 2019 64-bit → Qt Charts → Qt WebEngine
  3. 注意:一定要勾选Qt WebEngine,否则编译会报找不到QtWebEngineWidgets的错误
  4. 安装路径不要有中文和空格,我见过有人因为路径里有"Program Files (x86)"导致编译失败

2.2.2 安装编译工具

  • Visual Studio 2019/2022:安装时勾选"使用C++的桌面开发"
  • CMake:从官网下载安装包,安装时勾选"Add CMake to system PATH"
  • Git for Windows:默认选项即可

2.2.3 拉取源码

git clone --recursive https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol
git submodule update --init --recursive

这里有个细节:--recursive参数会同时拉取所有子模块。如果网络不好,子模块可能下载失败。我遇到过好几次,解决方案是手动进入libs/目录,逐个执行git submodule update --init。

2.2.4 编译

mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64
cmake --build . --config Release

嗯,这里要注意:-G参数指定生成器,Visual Studio版本号要对上。VS 2019是"16",VS 2022是"17"。我第一次用VS 2022时忘了改版本号,结果CMake报了一堆错。

常见错误:编译时报"fatal error C1083: 无法打开包括文件: 'QtCore/QtGlobal'"。这通常是Qt路径没配置好。检查环境变量CMAKE_PREFIX_PATH是否指向Qt安装目录,比如C:/Qt/5.15.2/msvc2019_64。

2.3 Linux环境搭建(以Ubuntu 20.04/22.04为例)

Linux下编译比Windows顺畅很多。我自己的主力开发机就是Ubuntu 22.04,基本没遇到什么大坑。

2.3.1 安装依赖

sudo apt update
sudo apt install build-essential cmake git ninja-build
sudo apt install qt5-default qttools5-dev qtwebengine5-dev libqt5charts5-dev
sudo apt install libgl1-mesa-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

注意:Ubuntu 22.04的仓库里没有qt5-default这个包了。如果你用22.04,需要手动安装Qt 5.15.3:

sudo apt install qtbase5-dev qttools5-dev qtwebengine5-dev libqt5charts5-dev

2.3.2 编译

git clone --recursive https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol
mkdir build && cd build
cmake .. -G Ninja
ninja

用Ninja比Make快不少,尤其是第一次全量编译时。我实测过,Ninja比Make快了大概30%。

小技巧:如果你只想编译特定模块,可以用ninja qgroundcontrol只编译主程序。这样调试时不用每次都全量编译,省时间。

2.4 macOS环境搭建

Mac用户相对少,但流程其实最简单。因为Homebrew把依赖都包好了。

# 安装Homebrew(如果没有的话)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装依赖
brew install cmake ninja qt@5
brew link qt@5 --force

# 拉取源码
git clone --recursive https://github.com/mavlink/qgroundcontrol.git
cd qgroundcontrol

# 编译
mkdir build && cd build
cmake .. -G Ninja -DCMAKE_PREFIX_PATH=$(brew --prefix qt@5)
ninja

这里有个坑:macOS的Qt安装路径和Linux不一样,必须手动指定CMAKE_PREFIX_PATH。我第一次编译时忘了加这个参数,结果CMake找不到Qt库,报了一堆"Could not find Qt5"的错误。

2.5 常见编译错误及解决方案

这部分是我最想说的。我在项目里遇到过各种奇奇怪怪的编译错误,下面列几个高频的,你遇到了直接照搬解决方案就行。

错误信息 原因 解决方案
Could not find Qt5WebEngineWidgets 未安装Qt WebEngine组件 重新运行Qt安装器,勾选WebEngine组件
fatal error: 'gst/gst.h' file not found 缺少GStreamer开发库 Linux: sudo apt install libgstreamer1.0-dev
macOS: brew install gstreamer
undefined reference to 'vtable for ...' Q_OBJECT宏未正确处理 清理build目录,重新运行cmake和编译
error: 'QStringView' is not a member of 'Qt' Qt版本过低(低于5.15) 升级Qt到5.15.x版本
ninja: error: loading 'build.ninja': No such file CMake配置未完成 检查CMake输出,确认没有错误后重新运行cmake

我曾经遇到过一个特别坑的问题:编译时一切正常,但运行时QGC闪退,控制台输出"QWidget: Must construct a QApplication before a QWidget"。原因是Qt插件平台选择错误。解决方案是在启动前设置环境变量:export QT_QPA_PLATFORM_PLUGIN_PATH=/path/to/qt/plugins。Windows下同理,把plugins目录加到PATH里。

2.6 本章知识体系

下面这张图把整个安装编译流程串起来了。你跟着这个流程走,基本不会迷路。

QGC安装编译全流程 1. 环境准备 Windows Linux (Ubuntu) macOS 安装Qt 5.15.x 安装编译工具链 拉取源码+子模块 4. CMake配置 + 编译 5. 运行验证 提示:遇到编译错误时,先检查Qt版本和子模块是否完整,这两项占了80%的问题

2.7 验证安装是否成功

编译完成后,在build/目录下会生成可执行文件。Windows下是Release/qgroundcontrol.exe,Linux/Mac下是staging/qgroundcontrol。

运行前建议先做两件事:

  1. 检查版本号:./qgroundcontrol --version,确认是你编译的版本
  2. 检查依赖库:ldd qgroundcontrol(Linux)或otool -L qgroundcontrol(Mac),确保没有缺失的.so或.dylib

如果一切正常,启动后你会看到QGC的主界面。第一次启动会弹出设置向导,直接关掉就行——那是给最终用户用的,我们开发者直接进主界面调试。

最后说一句:如果你在编译过程中遇到任何问题,先别急着搜百度。去QGC的GitHub Issues里搜一下,或者看看官方文档的Troubleshooting部分。我敢说,90%的问题都有人遇到过并解决了。剩下的10%,嗯...那可能就是你的环境比较特殊,需要自己慢慢排查了。