ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LoongArch下Qt交叉编译完整指南:从工具链到Qt Creator套件配置

LoongArch下Qt交叉编译完整指南:从工具链到Qt Creator套件配置 做国产化适配这两年LoongArch架构算是真正从PPT走到了量产落地。龙芯3A5000、3A6000的整机性能已经可以承担日常办公和业务系统运行大量Qt应用开始往LoongArch平台迁移。但现实是大多数团队的日常开发机还是x86_64机器每次编译验证都要跑到龙芯机器上现场编译一套Qt工程几分钟起步来回切换效率确实难看。交叉编译就是为解决这个问题而生的在x86_64开发机上用一套生成LoongArch机器码的工具链直接编译出能在龙芯上运行的Qt应用配合Qt Creator的套件机制把编译器、Qt库、调试器、部署目标一站式配好开发体验和本机开发差别不大。这篇文章是我在多个LoongArch项目里反复验证过的完整流程从交叉编译的思路、工具链与sysroot准备、Qt 5.15.10源码交叉编译到Qt Creator里的编译器、Qt版本、套件配置最后整理了实操中遇到的各种坑和排查思路。无论你是在做桌面应用龙芯适配还是给嵌入式设备交叉编译Qt程序都可以直接参考这套方案。1. 交叉编译整体思路与方案选型1.1 三个核心组成工具链、sysroot、Qt库交叉编译这件事拆开看其实就是三样东西的组合。第一样是能生成LoongArch机器码的交叉编译器也就是带loongarch64-linux-gnu-前缀的gcc/g系列工具。第二样是sysroot它是一棵模拟目标机根文件系统的目录树里面放了目标架构的头文件和系统库编译器在编译时遇到#include stdio.h、-lpthread这类需求时会去sysroot里找而不是误用宿主机x86_64的库。第三样是针对LoongArch编译出来的Qt库也就是libQt5Core.so、libQt5Widgets.so这些动态库以及配套的头文件、mkspec配置它们决定了你调用的Qt API在目标机上能用哪些功能。这三样东西由Qt Creator统一调度。你在Qt Creator里点“构建”它会先调用qmake或CMake生成Makefile再由Makefile调用交叉编译器去编译、链接你的代码最终产物是一个LoongArch格式的可执行文件。整个过程你只需要在Qt Creator里配置一次后续开发体验就很接近本机开发。想通了这个结构后面的每一步配置其实都是在给Qt Creator“喂”这三样东西的路径和参数。工具链、sysroot、Qt库三者缺一不可哪怕少一个构建阶段都会出现各种“找不到”的报错。1.2 方案选型自己动手还是用现成包在动手之前有两条路需要先选清楚。第一条路是“直接用现成交叉工具链包”。LoongArch开源社区和龙芯SDK都会发布面向x86_64宿主的交叉编译工具链压缩包解压后该有的gcc、g、binutils、gdb、sysroot基本都在里面路径前缀统一是loongarch64-linux-gnu-。这条路对绝大多数团队来说最省事我后面所有内容也是基于这条路线展开的。第二条路是用crosstool-NG或者buildroot自己从源码构建一套工具链。这需要手动适配gcc、glibc、binutils的版本组合还要处理内核头文件、启动文件等内容构建时间动辄以小时计且非常容易踩中版本兼容性的雷。除非你有定制gcc参数、改造ABI这类特殊需求否则我不建议在搭建Qt环境的阶段去做这件事。另外还有一个容易忽略的选择Qt库是用官方预编译包还是自己交叉编译一份。目前能直接找到的LoongArch Qt交叉编译预编译包并不算多很多情况下需要自己从qt-everywhere-src源码编译一份。这个操作虽然要花一点时间但胜在可控你可以按项目需要裁剪OpenGL、WebEngine之类的模块。我自己的机器上编译Qt 5.15.10大约需要二十多分钟到一小时完全在可接受范围内。2. 环境准备与交叉工具链获取2.1 宿主机环境要求先交代一下我这次搭建环境所用的宿主机配置以及我建议的最低要求。项目我的环境最低建议说明操作系统Ubuntu 22.04 x86_64Ubuntu 20.04 / Deepin 20.9 / Debian 11工具链对glibc版本有要求太老的系统可能起不来内存32GB8GB并行编译时内存占用明显核心数越多越吃内存磁盘空间80GB剩余15GB剩余Qt源码解压加构建产物加工具链加起来不小Qt Creator12.0.x建议8.0以上老版本对交叉编译套件的支持较弱交叉工具链loongarch64-linux-gnu-gcc 8.38.3或更高本文以8.3工具链为例我把操作系统放在第一行是有原因的。某些交叉工具链是通过动态链接宿主glibc的如果你的宿主机系统太老或太新工具链运行时会报GLIBC_2.xx not found之类的错误。遇到这种问题先别急着换工具链优先检查宿主机的glibc版本是否在工具链要求范围内。2.2 获取LoongArch交叉工具链以我用的这套工具链为例解压后默认会放在/opt/loongarch64-toolchain目录下目录结构大致长这样/opt/loongarch64-toolchain/ ├── bin │ ├── loongarch64-linux-gnu-gcc │ ├── loongarch64-linux-gnu-g │ ├── loongarch64-linux-gnu-gdb │ ├── loongarch64-linux-gnu-strip │ └── ... ├── lib ├── libexec └── sysroot ├── lib ├── usr └── ...拿到压缩包后先解压到/opt然后把bin目录加进PATH。我自己习惯先做个软链方便后面多版本切换sudo tar -xf loongarch64-toolchain.tar.xz -C /opt sudo ln -sf /opt/loongarch64-toolchain/bin/loongarch64-linux-gnu-gcc /usr/local/bin/loongarch64-linux-gnu-gcc sudo ln -sf /opt/loongarch64-toolchain/bin/loongarch64-linux-gnu-g /usr/local/bin/loongarch64-linux-gnu-g这里有个细节Qt Creator启动后读取的是自己的环境变量可能不会带上你shell里的export PATH。所以最后配置Qt Creator时编译器路径最好填绝对路径比如/opt/loongarch64-toolchain/bin/loongarch64-linux-gnu-g不要填loongarch64-linux-gnu-g否则Qt Creator找不到命令。验证工具链是否可用执行两条命令loongarch64-linux-gnu-gcc -v loongarch64-linux-gnu-gcc -dumpmachine如果输出中能看到gcc version 8.3.0和loongarch64-linux-gnu说明工具链本体没问题。2.3 准备并校验sysrootsysroot是交叉编译时最容易被忽视、却最影响结果的部分。它的作用是让编译器在编译时明确“目标机的系统环境长什么样”。如果你没有指定sysroot编译器会默认去宿主机的/usr/include、/usr/lib里找头文件和库那找到的全是x86_64的货链接时必然劈叉。一般随工具链一起发布的sysroot里已经包含了libc、libstdc、zlib等基础库目录通常就是工具链包内的sysroot子目录。你需要确认下面几个关键文件存在sysroot/lib/ld-linux-loongarch-lp64d.so.1 sysroot/usr/include/stdio.h sysroot/usr/lib/libc.so sysroot/usr/lib/libm.so其中ld-linux-loongarch-lp64d.so.1是LoongArch的64位动态链接器后面在目标机上跑程序也要依赖它。如果sysroot里缺了某个开发库比如缺少libssl-dev的头文件那在编译时就会报openssl/ssl.h: No such file or directory。这时候不能图省事把宿主机的头文件复制过去正确做法是在sysroot里补装对应架构的dev包或者换用Qt内部自带的第三方库后面会讲。在Qt Creator里配置套件时sysroot路径要填工具链包内的sysroot目录而不是工具链的bin目录。这两个目录千万别填反了填反之后的报错信息通常很迷惑——编译时找不到系统头文件但工具链本身明明是正常的。3. 交叉编译Qt 5.15.10为Qt Creator准备“弹药”接下来是最硬核的部分把Qt源码交叉编译出一份LoongArch版的库。我这里选的是qt-everywhere-src-5.15.10这个版本在LoongArch项目里用得最多补丁也最成熟。如果你用的是其他Qt版本整体流程一样只是mkspec可能需要微调。3.1 mkspec关键一步Qt交叉编译的核心机制是mkspec也就是“Makefile规范”。Qt源码里已经内置了大量平台的mkspec比如linux-arm-gnueabi-g、linux-aarch64-gnu-g但你翻遍qtbase也找不到linux-loongarch-g因为这个架构太新了官方还没有直接收录。所以我们要手动创建一份。打开源码目录下的qtbase/mkspecs新建一个linux-loongarch-g目录在里面创建qmake.conf文件内容如下MAKEFILE_GENERATOR UNIX CONFIG incremental QMAKE_INCREMENTAL_STYLE sublib include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g-unix.conf) QMAKE_CC loongarch64-linux-gnu-gcc QMAKE_CXX loongarch64-linux-gnu-g QMAKE_LINK loongarch64-linux-gnu-g QMAKE_LINK_SHLIB loongarch64-linux-gnu-g QMAKE_AR loongarch64-linux-gnu-ar cqs QMAKE_RANLIB loongarch64-linux-gnu-ranlib QMAKE_STRIP loongarch64-linux-gnu-strip QMAKE_CFLAGS_RELEASE -O2 -marchloongarch64 -mabilp64d QMAKE_CXXFLAGS_RELEASE -O2 -marchloongarch64 -mabilp64d load(qt_config)不要小看这个文件。QMAKE_CC和QMAKE_CXX告诉Qt构建系统用哪个交叉编译器QMAKE_AR和QMAKE_RANLIB负责处理静态库-mabilp64d指定的是LoongArch标准的LP64D ABI也就是64位整数64位双精度浮点寻址模式。如果你漏掉-mabilp64d后面链接时会遇到各种奇怪的符号找不到错误。还需要确认一点linux-loongarch-g目录里必须放一份与目录同名的qmake.confQt构建系统就是靠目录名匹配-xplatform linux-loongarch-g参数的。3.2 configure、编译、安装mkspec准备好了接下来在Qt源码根目录执行configure。我使用的完整命令如下cd qt-everywhere-src-5.15.10 export PATH/opt/loongarch64-toolchain/bin:$PATH ./configure -release -opensource -confirm-license \ -prefix /opt/qt-loongarch-5.15.10 \ -extprefix /opt/qt-loongarch-5.15.10 \ -xplatform linux-loongarch-g \ -sysroot /opt/loongarch64-toolchain/sysroot \ -no-opengl \ -no-cups \ -no-iconv \ -no-webengine \ -nomake examples \ -nomake tests \ -qt-zlib \ -qt-libpng \ -qt-libjpeg \ -qt-pcre逐个解释一下关键参数。-prefix是目标机上Qt的安装路径可以理解为将来部署到龙芯机器时Qt库存放的位置。-extprefix是构建完成后Qt实际安装到宿主机哪个目录交叉编译时如果只写-prefix默认会装到sysroot里那样下一步配置Qt Creator会麻烦不少所以这里把两者设为同一个路径让Qt安装到宿主机上部署时再整体拷到目标机对应目录。-sysroot就是前面准备好的sysroot目录。-no-opengl是为了避免sysroot里缺少EGL/GLES头文件导致configure失败如果你的目标机确实需要OpenGL加速那就得先把对应的loongarch64开发库补齐再删掉这个选项。-no-device-embedded就不用管了桌面场景不涉及。-qt-zlib、-qt-libpng、-qt-libjpeg、-qt-pcre这组参数我强烈建议保留。它们让Qt使用源码自带的三方库而不是依赖sysroot里的系统版本。这样不仅减少sysroot维护负担还能确保版本一致避免部署到目标机后因为系统库版本差异造成运行时崩溃。configure通过后开始编译安装make -j$(nproc) make install如果中间因为磁盘空间或内存不足失败就适当下调-j参数。我是用make -j8跑完的整个过程大约三十分钟。3.3 验证Qt安装结果安装完成后先检查一下关键文件是否齐全ls /opt/qt-loongarch-5.15.10/lib/libQt5Core.so* ls /opt/qt-loongarch-5.15.10/bin/qmake再运行qmake确认版本和架构信息/opt/qt-loongarch-5.15.10/bin/qmake -query重点看这几项输出QT_ARCH: loongarch64 QT_INSTALL_PREFIX: /opt/qt-loongarch-5.15.10 QMAKE_XSPEC: linux-loongarch-gQT_ARCH显示loongarch64说明这份Qt确确实实是针对LoongArch编译的。QMAKE_XSPEC显示我们自定义的mkspec名字说明管道已经打通。这里补充一个容易踩的坑/opt/qt-loongarch-5.15.10/bin/qmake这个文件本身是x86_64格式的宿主程序因为在宿主机上交叉编译Qt时qmake是作为构建工具运行在宿主端的它负责生成LoongArch目标的Makefile。所以当你用file命令查看时看到的是x86_64这是正常的不是配置错了。真正需要在意的是它生成的Makefile里面编译器、链接器路径是否指向LoongArch工具链。4. Qt Creator套件配置实战工具链和Qt库都准备好了接下来把这些东西装进Qt Creator的套件体系里。整个过程分成四步添加编译器、注册Qt版本、创建套件、配置远程设备。4.1 添加交叉编译器打开Qt Creator进入工具→选项→Kits→编译器标签页点击添加→GCC→C在弹出的对话框中填写名称LoongArch GCC 8.3 C编译器路径/opt/loongarch64-toolchain/bin/loongarch64-linux-gnu-g点击确定后Qt Creator会自动尝试检测ABI。LoongArch太新很多版本的Qt Creator无法自动识别ABI会显示为未知或者一个怪异的字符串。这是正常现象先不用管后面在套件配置里再处理。再用相同步骤添加C编译器路径填loongarch64-linux-gnu-gcc。4.2 注册LoongArch版Qt还是在选项→Kits→Qt版本标签页点击添加选择/opt/qt-loongarch-5.15.10/bin/qmake。添加后Qt Creator会解析qmake并显示版本信息。如果一切正常你会看到类似名称Qt 5.15.10 (linux-loongarch-g)qmake路径/opt/qt-loongarch-5.15.10/bin/qmake版本5.15.10如果列表里显示未找到Qt实例或者Qt版本无效最常见的原因是qmake文件类型不对。拿file命令检查一下file /opt/qt-loongarch-5.15.10/bin/qmake如果结果显示是ELF 64-bit LSB executable, x86-64说明没问题。如果结果显示是LoongArch或者ARM aarch64格式说明你拿到的Qt是目标机原生版本不是交叉编译产物那在x86_64宿主机上没法直接用。这种情况下只能回到第3节自己交叉编译一份。4.3 创建LoongArch套件接下来到Kits→套件标签页点击添加配置如下配置项值名称LoongArch 5.15.10 Desktop设备类型桌面编译器 - CLoongArch GCC 8.3 C编译器 - CLoongArch GCC 8.3 C调试器loongarch64-linux-gnu-gdb可选没有就先留空Qt版本Qt 5.15.10 (linux-loongarch-g)CMake工具系统自带或Qt Creator自带Sysroot/opt/loongarch64-toolchain/sysroot这里重点说Sysroot。在套件里指定Sysroot后Qt Creator在调用编译器时会自动加上--sysroot/opt/loongarch64-toolchain/sysroot参数编译器就能精确找到LoongArch的头文件和库。如果你不填这个字段编译器还是会跑到宿主机系统里找头文件就会出现诸如fatal error: bits/cconfig.h: No such file or directory这类经典交叉编译错误。配置完成后套件名称旁边如果出现黄色三角警告或者红色叉号说明套件还不可用。最常见的原因是ABI不匹配。Qt Creator要求编译器ABI和Qt版本的ABI至少有一个能对得上否则它会认为套件配置不完整。解决办法是回到编译器标签页找到刚添加的编译器在ABI一栏尝试手动指定。部分Qt Creator版本支持“自定义ABI”可以直接填入linux-generic-elf-64bit这类Linux桌面通用ABI标识。如果填完还是不行另一个有效操作是编辑配置文件~/.config/QtProject/qtcreator/profiles.xml把对应编译器的abi字段改成linux-generic-elf-64bit然后重启Qt Creator。注意Qt Creator并非只有ABI完全匹配才能编译。很多情况下只要你在项目页面手动选择了正确的套件编译器路径和Qt版本路径都正确即使套件图标带黄色警告点击构建也能正常编译。所以不要被警示图标吓到先试着构建一次再说。4.4 配置远程设备与部署方式开发完的目标程序最终要跑到龙芯机器上Qt Creator里可以把这一步也自动化。在工具→选项→设备标签页点击添加→通用Linux设备填入龙芯机器的IP、SSH端口、用户名和密码。如果你的开发机已经配置了SSH免密登录也可以选择密钥方式。配置完设备后回到项目→LoongArch套件→部署步骤添加一个新的自定义流程核心动作是上传文件把编译出的可执行文件从宿主机目录上传到目标机目录。如果程序依赖Qt库还需要把/opt/qt-loongarch-5.15.10整个目录同步到目标机。这一步我通常用rsync命令封装成一个部署步骤比直接内置SFTP更稳定。部署完成后运行步骤里设置目标机上的可执行文件路径。启动方式建议先选在设备上运行这样Qt Creator会把程序输出通过SSH拉回来显示在应用程序输出窗口。调试器如果不配这里就选“无”等需要远程调试时再单独折腾gdb。5. 常见问题与排查技巧实录这部分我整理了自己在多个环境里实际踩过的坑每个问题都给排查思路尽量做到看到报错就能定位。5.1 套件一直红色/黄色无法编译前面已经提到这是交叉编译配置中最常见的现象。排查顺序如下先看Qt版本是否有效。如果Qt版本标签页里qmake显示为红色说明Qt Creator解析qmake失败。原因可能是qmake权限问题、路径写错、或者qmake本身是LoongArch格式的宿主程序。再看编译器ABI是否为空或异常。如果是去编译器标签页手动填写ABI或者用文本编辑器改profiles.xml里的abi字段。这一步操作完记得完全退出Qt Creator再重启配置文件才会被重新加载。最后检查Sysroot路径。这个字段即使填错Qt Creator通常也不会报警只有在编译时才会突然报cannot find -lstdc之类的链接错误。5.2 qmake显示“Qt实例无效”或直接无法运行如果列出qmake路径后提示“无法运行qmake”先手动在终端执行/opt/qt-loongarch-5.15.10/bin/qmake -v如果终端报cannot execute binary file: Exec format error说明这个qmake不是宿主机可执行格式。再执行file命令确认一下file /opt/qt-loongarch-5.15.10/bin/qmake出现64-bit LoongArch格式的话就说明这份Qt只能运行在龙芯机器上不能用于宿主机交叉编译。解决办法就是回到第3节自己交叉编译一份Qt。还有一种情况是qmake能运行但显示Qt 5.15.10 (x86_64)之类的架构信息而不是loongarch64。这说明你下载的Qt源码没走我们的mkspec而是被系统默认的x86_64配置覆盖了。检查一下configure日志确认-xplatform linux-loongarch-g参数确实生效了。5.3 编译时找不到头文件或链接库交叉编译时报fatal error: XXX.h: No such file or directory九成是sysroot配置问题。先用最简单的命令测试echo #include stdio.h | loongarch64-linux-gnu-gcc -E - /dev/null这条命令用交叉编译器预处理一个最简单的头文件包含如果报错说明sysroot或者工具链本身有问题。如果通过再试Qt库头文件echo #include QtCore/QString | loongarch64-linux-gnu-g -E -I/opt/qt-loongarch-5.15.10/include - /dev/null如果这步失败说明Qt头文件路径没对上检查Qt安装目录里include/QtCore是否存在。链接时报cannot find -lQt5Widgets这类错误优先去/opt/qt-loongarch-5.15.10/lib确认对应库文件是否存在。如果存在检查文件名和链接名是否匹配比如libQt5Widgets.so是个软链真正的库文件可能是libQt5Widgets.so.5.15.10。部署到目标机时不能只拷贝软链要连同真实文件一起同步否则在目标机上运行时会报找不到动态库。5.4 目标机运行时缺少动态库和平台插件编译链接都通过了把可执行文件拷到龙芯机器上一运行却提示error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file这说明目标机上没有Qt库或者Qt库路径没有加入动态链接器搜索路径。解决方式有两种第一种把Qt库目录加入/etc/ld.so.conf.d/qt-loongarch.conf内容写/opt/qt-loongarch-5.15.10/lib然后执行ldconfig。第二种运行时用环境变量临时指定export LD_LIBRARY_PATH/opt/qt-loongarch-5.15.10/lib:$LD_LIBRARY_PATH还有一种常见运行时报错qt.qpa.plugin: Could not load the Qt platform plugin xcb in even though it was found这说明程序启动时找不到Qt的平台插件。Qt程序启动时会通过QT_QPA_PLATFORM_PLUGIN_PATH寻找插件目录正常情况下插件就在/opt/qt-loongarch-5.15.10/plugins/platforms/libqxcb.so。如果你部署时只拷贝了lib目录而漏掉plugins目录就会报这个错。正确做法是把Qt安装目录整体同步到目标机。排查时可以先用最简平台模式验证排除xcb相关干扰QT_QPA_PLATFORMminimal ./your_app如果能正常运行说明程序本身没问题是xcb插件或X11环境的兼容性问题。5.5 Qt Creator代码对齐快捷键失灵这个问题看起来跟编译无关但实际项目里遇到的人真不少。Qt Creator默认的代码自动格式化快捷键是CtrlI在很多中文输入法环境下会被输入法切换热键拦截导致按了没反应。Qt Creator还隐藏了一个“重新格式化当前文件”的快捷键默认没绑定任何键。解决办法有两个。最简单的在工具→选项→环境→键盘页面搜索“格式化”给“重新格式化当前文件”或“自动格式化选择区域”绑定一个像CtrlAltA这样的新快捷键。另一个思路是把Qt Creator里的格式化快捷键设置成CtrlShiftI避开输入法的常用组合。具体用哪个看个人习惯但记住一点这个功能在Qt Creator里叫“Format”不叫“Align”搜索关键词别找错。5.6 编译非常慢试试ccache交叉编译Qt应用时最影响开发效率的就是编译速度。Qt头文件多、模板多每改一行代码都可能触发几十个文件的重新编译。这种情况下我强烈建议给Qt Creator套上ccache。先确认工具链里没有自带ccache然后安装并配置sudo apt install ccache mkdir -p ~/.config/ccache echo max_size 20G ~/.config/ccache/ccache.conf让qt Creator使用ccache不需要改工具链路径而是通过编译器标签页把编译器路径改成/usr/lib/ccache/loongarch64-linux-gnu-g。如果你的ccache安装路径下没有loongarch64前缀的软链可以手动创建sudo ln -s /usr/bin/ccache /usr/lib/ccache/loongarch64-linux-gnu-gcc sudo ln -s /usr/bin/ccache /usr/lib/ccache/loongarch64-linux-gnu-g在Qt Creator里把C和C编译器路径都改成这两个软链路径再清空一次构建目录。第二次构建时你就会发现时间大幅缩短因为gcc的预处理结果在第一次构建时已经缓存了。5.7 常见报错速查表现象常见原因处理办法Exec format errorqmake或工具链本身不是宿主机可执行程序file命令确认文件架构确认使用交叉编译版Qtfatal error: bits/cconfig.h编译器使用宿主机头文件检查套件里Sysroot是否正确cannot find -lstdcsysroot缺失libstdc库或路径错误检查sysroot/usr/lib下libstdc.so是否存在undefined reference to xxxxABI不匹配或mkspec缺少-mabilp64d检查mkspec重新编译QtCould not find the Qt platform plugin xcb部署时漏拷plugins目录同步整个Qt安装目录到目标机libQt5Core.so.5: cannot open shared object file目标机LD_LIBRARY_PATH没配置export LD_LIBRARY_PATH...或写入ld.so.conf套件黄色警告但能编译编译器ABI未被Qt Creator识别手动填写ABI或忽略警告直接构建6. 一个最小Qt工程从编译到上机的完整验证前面配置了这么多最后用一个最简单的Qt Widgets程序做一次端到端验证确保整条链路是通的。6.1 本地交叉编译验证在Qt Creator里新建一个Qt Widgets Application工程名叫HelloLoongArch基类选择QMainWindow就行。创建完成后在左下角的“套件选择器”里选中LoongArch 5.15.10 Desktop套件然后直接点构建。构建成功后到构建目录里找到生成的可执行文件用file命令验证一下file build-HelloLoongArch-LoongArch_5_15_10_Desktop-Debug/HelloLoongArch如果输出类似ELF 64-bit LSB executable, LoongArch, version 1 (SYSV), dynamically linked ...那就说明这个程序是地地道道的LoongArch格式已经可以在龙芯机器上执行了。6.2 部署到龙芯机器并运行部署步骤可以选择两种方式。如果你配置好了通用Linux设备直接在Qt Creator里点部署它会按前面配置的rsync规则把文件和Qt库推送到目标机。如果没配置远程设备可以手动用scp或者U盘拷贝scp build-HelloLoongArch-LoongArch_5_15_10_Desktop-Debug/HelloLoongArch loongarch-machine:/home/user/ scp -r /opt/qt-loongarch-5.15.10 loongarch-machine:/opt/拷贝完成后在龙芯机器上执行export LD_LIBRARY_PATH/opt/qt-loongarch-5.15.10/lib:$LD_LIBRARY_PATH export QT_QPA_PLATFORM_PLUGIN_PATH/opt/qt-loongarch-5.15.10/plugins/platforms ./HelloLoongArch如果界面正常弹出说明从工具链、sysroot、Qt交叉编译到Qt Creator套件配置这条完整链路完全打通了。接下来你就可以像开发普通Qt应用一样把代码改动同步到LoongArch套件下编译、部署、运行验证。7. 个人实操体感与一点补充整套流程跑下来我最深的体会是交叉编译本身不复杂复杂的是“路径一致性”。工具链路径、sysroot路径、Qt安装路径、目标机部署路径每一个环节的路径都必须严格对齐。很多看起来莫名其妙的问题追根究底就是某个路径填歪了比如sysroot填成了工具链的bin目录或者Qt Creator里编译器路径用的是相对PATH的名字而不是绝对路径。另外还有一个小技巧想分享给大家在Qt Creator里新建套件时名字里建议带上架构和目标机信息比如LoongArch 5.15.10 3A5000。这个命名习惯在项目后期同时维护x86_64、ARM、LoongArch多个套件时会非常省心谁都不会看错当前在编哪个目标。如果后续你要用CMake体系而不是qmake体系记得在创建CMake工程时给LoongArch套件配上CMake工具链文件把CMAKE_SYSTEM_PROCESSOR设为loongarch64把CMAKE_C_COMPILER和CMAKE_CXX_COMPILER指向交叉工具链的绝对路径。有了Qt Creator套件这层封装CMake和qmake的切换其实就是套件选择器里点一下的事情底层逻辑都是一样的。希望这篇文章能帮你把LoongArch交叉编译环境顺顺当当搭起来。如果过程中踩到其他坑别慌按照报错信息一步步反查工具链、sysroot、Qt版本和套件配置基本都能定位到问题所在。
返回列表