作者:手机用户2502923261 | 来源:互联网 | 2024-12-26 10:54
Qt 5.15.2 在银河麒麟龙芯平台打包的实战经验
在银河麒麟操作系统和龙芯架构上进行 Qt 5.15.2 项目的打包过程中,遇到了不少挑战。以下是一些关键点和解决方法。
- 对于依赖库的处理,linuxdeployqt 是一个非常有效的工具。虽然网上有很多人自己编写脚本通过 ldd 拷贝依赖库,但这种方式往往会导致段错误(segmentation fault),除非是纯 C++ 代码且没有复杂的自定义绘制。
- linuxdeployqt 的官方 GitHub 仓库仅提供了针对 x86 架构的 AppImage 包,该包集成了 linuxdeploy(用于查找库)、patchelf(用于修改 ldd)和 appimagetool(用于生成 AppImage)。x86 架构下这些工具非常好用。
- 对于国产化环境中的 ARM 和 MIPS 架构,作者曾提供过 ARM 的 AppImage 包,但官方 GitHub 仓库中并未包含。MIPS 架构则完全没有现成的 AppImage 包可用。
- 由于缺乏现成的工具包,只能自行编译源码。以下是具体的步骤:
- 首先安装 patchelf,在银河麒麟系统中可以直接通过 apt 安装:
sudo apt install patchelf
。 - 下载 linuxdeployqt 源码:
git clone https://github.com/probonopd/linuxdeployqt.git
。 - 编译源码,某些用户建议需要调整 libc 版本校验和 qmake 路径,但实际上无需任何修改即可成功编译:
cd linuxdeployqt & cmake CMakeLists.txt & make
。 - 设置可执行权限并将编译结果拷贝到 /usr/bin 目录供后续使用:
cd ./tools/linuxdeployqt
,sudo chmod a+x linuxdeployqt
,sudo cp linuxdeployqt /usr/bin/
。 - 如果不需要使用 appimagetool,则可以跳过此工具的编译。
- 在 Qt Creator 中配置好编译套件 Kit 即可正常使用 Qt 环境;若要在 Shell 中使用,推荐通过设置环境变量的方式。打包 QML 项目时需要用到 qmlimportscanner,若未正确配置可能会导致 QML 解析失败。银河麒麟自带的 Qt 环境中所有工具均为 qtchooser 的软链接,直接修改
/usr/lib/mips64el-linux-gnu/qt-default/qtchooser/default.conf
文件即可。 - 将可执行文件拷贝到指定目录,并让工具自动查找依赖库:
sudo linuxdeployqt SSLVPN_Linux_Qt -qmldir=/home/vpn/qt5.15.2_mips/ -appimage
。不加 -appimage 参数时会缺少一些必要的库,导致程序无法运行。 - 最终生成的文件结构包括 lib、plugins 和 qml 目录,以及两个可执行文件和启动脚本。其中 plugins/platforms 文件夹内的 libqxcb.so 是必不可少的,同时还需要其依赖的库(如 xcb)。
启动脚本 runApp.sh 如下:
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
export QML2_IMPORT_PATH=./:$QML2_IMPORT_PATH
export QT_PLUGIN_PATH=./:$QT_PLUGIN_PATH
ldd SSLVPN_Linux_Qt > 1.txt
$(pwd)/SSLVPN_Linux_Qt
此外,对于前后端分离的 QML 项目,除了复制依赖库外,还需额外复制 QML 文件夹及其相关依赖。