从x86_64 Ubuntu交叉编译定制版QGroundControl至Jetson Nano指南
交叉编译定制版QGroundControl到Jetson Nano(ARM64)指南
1. 搭建x86_64 Ubuntu到ARM64的交叉编译环境
步骤1:安装系统基础工具
先安装交叉编译核心依赖:
sudo apt update && sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu cmake ninja-build qemu-user-static
步骤2:获取Jetson Nano Sysroot
Sysroot是目标平台的根文件系统镜像,用于编译时查找依赖:
- 从运行中的Jetson Nano直接拷贝(最可靠):
# 替换为你的Jetson Nano SSH地址和本地存储路径 scp -r user@192.168.x.x:/ /path/to/local/jetson-sysroot - 清理sysroot中的无效链接,避免编译路径错误:
find /path/to/local/jetson-sysroot -type l -exec rm {} \;
步骤3:(可选)安装Linaro工具链
如果系统自带工具链版本不满足需求,可替换为Linaro的ARM64工具链:
# 下载适配Jetson Nano的版本(以7.5.0为例) wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz # 解压到系统目录 sudo tar -xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt # 添加到环境变量 export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
2. 配置CMake工具链、Sysroot及Qt版本
步骤1:交叉编译Qt 6.8.3到ARM64
QGroundControl依赖ARM64版本的Qt,无法直接使用x86版本:
- 下载Qt 6.8.3源码并解压
- 创建交叉编译配置脚本
qt-cross-configure.sh:#!/bin/bash ./configure \ -prefix /path/to/local/qt6.8.3-aarch64 \ -device linux-jetson-nano-g++ \ -sysroot /path/to/local/jetson-sysroot \ -opensource \ -confirm-license \ -skip qtwebengine \ # 若QGC不需要可跳过,大幅减少编译时间 -nomake examples \ -nomake tests - 执行配置并编译:
chmod +x qt-cross-configure.sh && ./qt-cross-configure.sh make -j$(nproc) && sudo make install
步骤2:编写CMake工具链文件
创建toolchain-aarch64.cmake,内容如下:
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) # 指定交叉编译器 set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) # 设置Sysroot路径 set(CMAKE_SYSROOT /path/to/local/jetson-sysroot) # 强制CMake仅在Sysroot中查找依赖 set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) # 编译器与链接器参数 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot=${CMAKE_SYSROOT}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --sysroot=${CMAKE_SYSROOT}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${CMAKE_SYSROOT}") # 配置Qt路径 set(Qt6_DIR /path/to/local/qt6.8.3-aarch64/lib/cmake/Qt6) set(Qt6CoreTools_DIR /path/to/local/qt6.8.3-aarch64/lib/cmake/Qt6CoreTools) # 根据QGC依赖添加其他Qt模块,比如Qt6Gui、Qt6Quick等
步骤3:交叉编译QGroundControl
进入QGC源码目录,执行编译:
mkdir build-aarch64 && cd build-aarch64 cmake -S .. -B . -DCMAKE_TOOLCHAIN_FILE=../toolchain-aarch64.cmake -DCMAKE_BUILD_TYPE=Release make -j$(nproc)
3. 处理ARM64目标平台的依赖与运行时库
检查编译产物依赖
用交叉编译工具链的readelf工具查看二进制依赖:
aarch64-linux-gnu-readelf -d build-aarch64/QGroundControl | grep NEEDED
补全缺失依赖
如果sysroot中缺少某个依赖库:
- 从Jetson Nano上拷贝对应库文件(比如
libssl.so)到/path/to/local/jetson-sysroot/usr/lib/aarch64-linux-gnu/ - 或者通过dpkg下载ARM64版本的依赖包并解压到sysroot:
sudo dpkg --add-architecture arm64 sudo apt download libssl-dev:arm64 dpkg-deb -x libssl-dev_*.deb /path/to/local/jetson-sysroot
验证依赖完整性
确保所有依赖库都存在于sysroot中,避免Jetson Nano运行时缺失。
4. 打包为Jetson Nano可运行的AppImage
步骤1:准备AppDir结构
创建标准AppImage目录结构:
mkdir -p QGroundControl.AppDir/usr/bin QGroundControl.AppDir/usr/lib # 拷贝编译好的QGC二进制 cp build-aarch64/QGroundControl QGroundControl.AppDir/usr/bin/ # 拷贝所有依赖库到lib目录 aarch64-linux-gnu-readelf -d build-aarch64/QGroundControl | grep NEEDED | awk '{print $4}' | tr -d '[]' | xargs -I {} cp /path/to/local/jetson-sysroot/usr/lib/aarch64-linux-gnu/{} QGroundControl.AppDir/usr/lib/
步骤2:添加AppRun脚本
创建QGroundControl.AppDir/AppRun:
#!/bin/bash HERE=$(dirname "$(readlink -f "${0}")") export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}" exec "${HERE}/usr/bin/QGroundControl" "$@"
给脚本添加执行权限:
chmod +x QGroundControl.AppDir/AppRun
步骤3:添加桌面文件与图标
创建QGroundControl.AppDir/QGroundControl.desktop:
[Desktop Entry] Name=QGroundControl Exec=QGroundControl Icon=QGroundControl Type=Application Categories=Utility;
拷贝QGC图标到QGroundControl.AppDir/并命名为QGroundControl.png。
步骤4:打包AppImage
- 获取ARM64版本的AppImageTool二进制文件
- 给AppImageTool添加执行权限:
chmod +x appimagetool-aarch64 - 执行打包(依赖qemu-user-static运行ARM二进制):
./appimagetool-aarch64 QGroundControl.AppDir
生成的.AppImage文件即可直接在Jetson Nano上运行。
内容的提问来源于stack exchange,提问作者user9262680
相关产品推荐
相关产品推荐

