You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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版本:

  1. 下载Qt 6.8.3源码并解压
  2. 创建交叉编译配置脚本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
    
  3. 执行配置并编译:
    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

  1. 获取ARM64版本的AppImageTool二进制文件
  2. 给AppImageTool添加执行权限:chmod +x appimagetool-aarch64
  3. 执行打包(依赖qemu-user-static运行ARM二进制):
    ./appimagetool-aarch64 QGroundControl.AppDir
    

生成的.AppImage文件即可直接在Jetson Nano上运行。

内容的提问来源于stack exchange,提问作者user9262680

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 01:40:23