Jetson Orin Nano Qt 5.15.x 编译实战:从源码到QGC环境搭建全解析 1. 为什么要在Jetson Orin Nano上手动编译Qt 5.15.x最近在给Jetson Orin Nano搭建QGCQGroundControl开发环境时我发现官方提供的Qt版本总是缺斤少两。特别是当需要用到QtLocation、QtQuick3D这些模块的私有头文件时预编译版本根本满足不了需求。这就像你去超市买组装家具发现零件包总是少几个螺丝钉一样让人抓狂。手动编译Qt源码听起来很吓人但实际操作下来发现并没有想象中那么难。我这次选择的是Qt 5.15.3版本主要考虑到它是LTS长期支持版本中比较稳定的一个分支。在ARM架构的Orin Nano上编译最麻烦的其实是处理各种平台相关的依赖问题。不过别担心跟着我的步骤走保证你能避开我踩过的所有坑。2. 获取Qt源码的两种靠谱方式2.1 清华镜像源下载国内推荐国内用户我强烈建议用清华源速度能快10倍不止。具体地址是https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/5.15/进入后选择5.15.13目前最新子版本下载qt-everywhere-opensource-src-5.15.13.tar.xz。这里有个细节要注意一定要选single目录下的完整源码包不要下成模块化分发包了。下载完成后用这个命令解压tar -xvf qt-everywhere-opensource-src-5.15.13.tar.xz cd qt-everywhere-opensource-src-5.15.13 mkdir build cd build2.2 官方仓库下载备用方案如果清华源不可用可以直接去Qt官网https://download.qt.io/archive/qt/5.15/5.15.3/single/下载同样的文件。不过要注意国外服务器速度可能很慢建议用wget配合-c参数支持断点续传wget -c https://download.qt.io/archive/qt/5.15/5.15.3/single/qt-everywhere-opensource-src-5.15.3.tar.xz3. 配置编译环境的关键参数在build目录下运行configure前需要先安装一堆依赖sudo apt-get install build-essential libgl1-mesa-dev libxkbcommon-x11-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xinput-dev libxcb-xfixes0-dev libxcb-xkb-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-util-dev libxcb-xrm-dev libxcb-xtest0-dev libxcb-xv0-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-shm0-dev libxcb-ewmh-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xinput-dev libxcb-xfixes0-dev libxcb-xkb-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-util-dev libxcb-xrm-dev libxcb-xtest0-dev libxcb-xv0-dev libxcb-dri3-dev libxcb-present-dev libxcb-glx0-dev libxcb-shm0-dev libxcb-ewmh-dev然后配置编译参数重点来了../configure -prefix $HOME/QGC/Qt5.15.3 \ -opensource -confirm-license \ -release -nomake tests -nomake examples \ -skip qtandroidextras -skip qtmacextras -skip qtwinextras \ -platform linux-g \ -xplatform linux-aarch64-gnu-g \ -qt-xcb \ -qt-libjpeg \ -qt-libpng \ -qt-zlib \ -opengl es2 \ -eglfs \ -no-pch \ -sqlite \ -qt-sqlite \ -qt-harfbuzz \ -feature-opengles2 \ -feature-opengles3 \ -feature-opengles31 \ -feature-opengles32 \ -feature-vulkan这些参数我解释几个关键的-prefix指定安装路径建议放在home目录-platform指定宿主机编译器-xplatform指定交叉编译器必须用aarch64版本-opengl es2指定使用OpenGL ES嵌入式设备必须-eglfs启用EGLFS嵌入式显示支持4. 解决编译过程中的两大拦路虎4.1 assimp库未定义错误这个错误信息是这样的Project ERROR: Library assimp is not defined.解决方法其实很简单找到这个文件qt-everywhere-src-5.15.3/qtquick3d/src/plugins/assetimporters/assimp/assimp.pro用文本编辑器打开把原来的内容替换成CONFIG link_pkgconfig PKGCONFIG assimp然后安装assimp开发包sudo apt-get install libassimp-dev4.2 缺少limits头文件问题这个问题在5.15.2版本特别严重5.15.3已经修复了大部分。如果遇到类似错误fatal error: limits: No such file or directory需要手动在报错的.h文件头部添加#include limits常见需要修改的文件包括qtbase/src/corelib/text/qbytearraymatcher.h qtbase/src/corelib/global/qendian.h qtbase/src/corelib/global/qfloat16.h qtdeclarative/src/qmldebug/qqmlprofilerevent_p.h5. 编译安装与系统集成编译命令很简单make -j$(nproc) make install但安装完成后还需要把库文件部署到系统目录。这是我的部署方案文件类型目标路径部署命令动态库(.so)/usr/local/libsudo cp $HOME/QGC/Qt5.15.3/lib/*.so* /usr/local/lib/头文件/usr/local/includesudo cp -r $HOME/QGC/Qt5.15.3/include/* /usr/local/include/插件/usr/local/lib/qt5/pluginssudo cp -r $HOME/QGC/Qt5.15.3/plugins/* /usr/local/lib/qt5/plugins/最后别忘了更新动态链接库缓存sudo ldconfig6. QGC编译时的私有头文件问题当编译QGC时可能会遇到这种错误fatal error: QtLocation/private/qgeomaptype_p.h: No such file or directory这是因为私有头文件的路径比较特殊默认不会安装到系统目录。解决方法是在CMakeLists.txt中添加私有头文件路径include_directories( /home/yourname/QGC/Qt5.15.3/include/QtLocation/5.15.3/QtLocation/private /home/yourname/QGC/Qt5.15.3/include/QtQuick/5.15.3/QtQuick/private # 其他需要的私有头文件路径 )或者在环境变量中添加export CPLUS_INCLUDE_PATH$HOME/QGC/Qt5.15.3/include/QtLocation/5.15.3/QtLocation/private:$CPLUS_INCLUDE_PATH7. 验证Qt环境是否正常工作创建一个简单的测试程序#include QApplication #include QLabel int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label(Hello Jetson Orin Nano!); label.show(); return app.exec(); }编译运行qmake -project qmake make ./test如果能看到窗口弹出说明Qt环境配置成功。最后建议设置环境变量方便后续开发echo export PATH$HOME/QGC/Qt5.15.3/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc整个编译过程在Jetson Orin Nano上大约需要3-4小时建议在晚上睡觉前开始编译。如果遇到编译卡死可以尝试减少并行编译线程数比如用make -j4代替make -j$(nproc)。