银河麒麟 Qt 可执行文件打包说明

VPX-404飞腾板卡,麒麟(aarch64)使用 linuxdeployqt,把 ClientApp 和 Qt / 业务 .so 打到同一目录,整份拷走即可运行。


1. 准备可执行文件(Release)

  1. Qt Creator 打开 /data/xkun/project/ClientAppProject/ClientAppProject.pro
  2. 左下角选 Release
  3. 构建 → 执行 qmake ,再 重新构建

本机依赖库只编过 Debug(output/debug/lib 里带 d 后缀,如 libcustom_uid.so)。.pro 里 unix 的 Release 已改为链接这套库,否则会报 cannot find -lcustom_ui 等。

编出来的二进制一般在:

TEXT复制

复制代码
/data/xkun/project/ClientAppProject/ClientApp/release/ClientApp/ClientApp

或拷到发布目录(下文以此为准):

TEXT复制

复制代码
/data/xkun/project/ClientAppProject/ClientApp/release/lan404/ClientApp

确认是 ARM 可执行文件:

BASH复制

复制代码
file /data/xkun/project/ClientAppProject/ClientApp/release/lan404/ClientApp
# 应为:ELF 64-bit LSB shared object, ARM aarch64, dynamically linked

2. 下载 linuxdeployqt

官网:https://github.com/probonopd/linuxdeployqt/releases/tag/continuous

本机是 aarch64,必须下 ARM 版,不要下 x86_64。

BASH复制

复制代码
cd ~/桌面
mkdir -p linuxdeployqt && cd linuxdeployqt
wget -O linuxdeployqt-continuous-aarch64.AppImage \
  https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-aarch64.AppImage
chmod a+x linuxdeployqt-continuous-aarch64.AppImage
./linuxdeployqt-continuous-aarch64.AppImage --version

地址不能当命令敲,前面必须有 wget 或 curl -L -o。访问不了 GitHub 时用浏览器下载到同一目录。

若提示 FUSE / Cannot mount AppImage:

BASH复制

复制代码
./linuxdeployqt-continuous-aarch64.AppImage --appimage-extract
./squashfs-root/AppRun --version

本机验证过的版本:linuxdeployqt build 107,2025-10-21。


3. 放到发布目录

把 可执行文件 和 linuxdeployqt 都放到:

TEXT复制

复制代码
/data/xkun/project/ClientAppProject/ClientApp/release/lan404

目录里至少要有:

TEXT复制

复制代码
ClientApp
linuxdeployqt-continuous-aarch64.AppImage

必须先进入该目录,对 ./ClientApp 执行。

不要在 ~/桌面/linuxdeployqt 里对长绝对路径打包,会报:

TEXT复制

复制代码
FHS-like mode with PREFIX, fhsPrefix: "/../.."
ERROR: Could not find app-binary ""

4. 先让 ldd 能找到业务库

linuxdeployqt 要求 ldd ./ClientApp 没有任何 not found,否则会中止,例如:

TEXT复制

复制代码
ERROR: ldd outputLine: "libcustom_uid.so => not found"

先拷业务库和 Boost(本机实际用的是 debug 库):

BASH复制

复制代码
cd /data/xkun/project/ClientAppProject/ClientApp/release/lan404

cp -d /data/xkun/project/ClientAppProject/output/debug/lib/*.so* .
cp -d /data/xkun/soft/boost/boost_1_82_0/boost_1_82_0/stage/lib/libboost_*.so* . 2>/dev/null

export LD_LIBRARY_PATH="$PWD:$LD_LIBRARY_PATH"
ldd ./ClientApp | grep "not found"

没有输出才继续。若还缺 libasan(工程 unix 段开了 AddressSanitizer):

BASH复制

复制代码
cp -d /usr/lib/aarch64-linux-gnu/libasan.so* .

业务库通常包括:

  • libcustom_uid.so
  • libNetUnitBoostd.so
  • libHyFFTd.so
  • libdevice_driver_interfaced.so
  • libserver_core_interfaced.so
  • libHySpectrumd.so
  • libHyPxiApid.so
  • libHrDetectInterfaced.so

5. 执行 linuxdeployqt

qmake 必须是编这个程序的那一套(本机 Qt 5.12.8):

BASH复制

复制代码
cd /data/xkun/project/ClientAppProject/ClientApp/release/lan404
chmod +x ./ClientApp ./linuxdeployqt-continuous-aarch64.AppImage
export LD_LIBRARY_PATH="$PWD:$LD_LIBRARY_PATH"

./linuxdeployqt-continuous-aarch64.AppImage ./ClientApp \
  -qmake=/data/xkun/soft/qt/qt-everywhere-src-5.12.8/Qt-5.12.8/bin/qmake

成功标志:退出码 0,目录里出现 Qt 插件,例如:

BASH复制

复制代码
echo $?
ls -l plugins/platforms/libqxcb.so

正常完成后目录大致为:

TEXT复制

复制代码
AppRun
ClientApp
lib/
libcustom_uid.so
libdevice_driver_interfaced.so
libHrDetectInterfaced.so
libHyFFTd.so
libHyPxiApid.so
libHySpectrumd.so
libserver_core_interfaced.so
linuxdeployqt-continuous-aarch64.AppImage   # 打包工具
plugins/
qt.conf

若提示 Keeping existing AppRun 或 qt.conf already exists,且已经有 plugins/platforms/libqxcb.so,说明上次已经打过,可以不再打。

若 AppImage 不传参数(又出现 app-binary ""):

BASH复制

复制代码
./linuxdeployqt-continuous-aarch64.AppImage --appimage-extract
./squashfs-root/AppRun ./ClientApp \
  -qmake=/data/xkun/soft/qt/qt-everywhere-src-5.12.8/Qt-5.12.8/bin/qmake

解包残留不要留在发布目录里干扰下次打包:

BASH复制

复制代码
rm -rf squashfs-root

6. 运行

BASH复制

复制代码
cd /data/xkun/project/ClientAppProject/ClientApp/release/lan404
export LD_LIBRARY_PATH=.:./lib:$LD_LIBRARY_PATH
./ClientApp

或:

BASH复制

复制代码
./AppRun
相关推荐
Funlang31 分钟前
给机器写的 JavaScript 造个笼子
开发语言·javascript·ecmascript
普通人636 分钟前
PHP文件读写完全指南
开发语言·php·1024程序员节
坤坤子吖1 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢2 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
一条大祥脚3 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
FRing034 小时前
vue2干货总结8(路由模块封装、router-link、声明式导航、路由重定向、编程式导航)
开发语言·前端·vue.js·vue2
旖旎夜光4 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
starzy19904 小时前
深入理解Scala嵌套函数:作用域封装之道
开发语言·scala
Sakura_j_h_4 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc