当前位置: 首页 > news >正文

如何手动打包 Linux(麒麟系统)的 Qt 程序

gcc版本

gcc版本

确保目标系统(运行环境)的 GCC 版本 高于或等于开发环境的版本,否则程序无法在目标平台运行。通过 gcc -v 可查看当前版本。

cmake生成可执行文件

强烈建议在cmakelists添加设置运行时 rpath 为 $ORIGIN/…/lib(相对路径),否则可能在其他设备上运行时会报错,笔者亲身经历

# 设置运行时 rpath 为 $ORIGIN/../lib(相对路径)
set_target_properties(${PROJECT_NAME} PROPERTIESINSTALL_RPATH "$ORIGIN/../lib"BUILD_WITH_INSTALL_RPATH TRUE
)set_target_properties(${PROJECT_NAME}c PROPERTIESINSTALL_RPATH "$ORIGIN/../lib"BUILD_WITH_INSTALL_RPATH TRUE
)

img

附上报错截图

img

img

笔者这里以sunny450_silc可执行文件为例,编译在工程路径下的build目录中,不会编译请自行搜索

构建打包目录

  1. 目录结构
package/
├── bin/
│   ├── run.sh          # 启动脚本
│   └── app             # 程序的可执行文件
├── lib/
│   ├── libQt5Core.so.5 # 依赖库 (例如 Qt 库)
│   ├── libQt5Gui.so.5  # 依赖库
│   ├── libQt5Widgets.so.5
│   ├── libstdc++.so.6  # 其他依赖库
│   └── ...             # 其他库
├── plugins/            # Qt 插件目录
│   ├── platforms/
│   │   └── libqxcb.so  # 平台插件 (用于 GUI 应用的 X11 支持)
│   └── ...             # 其他可能的插件
└── resources/          # 资源文件(可选)└── icon.png        # 图标或其他资源文件
  1. 建议放到工程路径下
mkdir -p package/{bin,lib,plugins}

  1. 复制可执行程序到bin目录下
cp build/sunny450_silc package/bin/

准备程序运行库

查看所需运行库

ldd package/bin/sunny450_silc

可以根据各个库后面的路径来找对应的库,并将它们全部复制到之前创建的bin目录下,或者使用脚本复制依赖库,笔者这里用脚本.

新建复制脚本

vim cplib.sh

写入内容

#!/bin/bash
ldd ./sunny450_silc | awk '/=> \// {print $3}' | while IFS= read -r lib; doif [ -L "$lib" ]; thencp "$(readlink -f "$lib")" ../lib/elsecp "$lib" ../lib/fi
done

添加可执行权限

chmod +x package/bin/cplib.sh

执行

./cplib.sh

复制qt插件

查看qt路径

which qmake

复制

编写运行脚本

cd bin

vim run.sh

#!/bin/bash
export LD_LIBRARY_PATH=$(dirname $0)/../lib:$LD_LIBRARY_PATH
$(dirname $0)/sunny450_silc

添加可执行权限

chmod +x run.sh

运行

压缩

tar czvf sunny450_silc.tar.gz package/

http://www.xdnf.cn/news/1241281.html

相关文章:

  • JVM学习专题(四)对象创建过程
  • 【Spring Boot 】Spring Boot + OpenAI API 万能集成模板,实现快速集成AI
  • sqli-labs通关笔记-第30关GET字符注入(WAF绕过 双引号闭合 手工注入+脚本注入两种方法)
  • AI Agents漏洞百出,恶意提示等安全缺陷令人担忧
  • 高防服务器租用的作用都有哪些?
  • 随笔之 ClickHouse 列式分析数据库安装注意事项及基准测试
  • 【BUUCTF系列】[SUCTF 2019]EasySQL1
  • 【论文简读】LongSplat
  • Claude Code深度操作指南:从零到专家的AI编程助手实战
  • MAC-Spring Cloud + Spring Boot + RocketMQ集成
  • 链表问题解决分析框架
  • SP20D120CTU:1200 V/20 A SiC肖特基二极管的TO-263封装升级版,数据工程师必看!
  • 政府财政行业云原生转型之路
  • Maya 2024安装指南及安装包下载
  • 车载通信架构 ---车内通信的汽车网络安全
  • Linux中netstat详细使用指南
  • 【Linux】System V - 基于建造者模式的信号量
  • DP-v2.1-mem-clean学习(3.6.8.2-3.6.8.3)
  • Linux文件权限管理与ACL配置指南
  • wpf Image 转 90 度
  • 9.感知机、神经网络
  • 国产化Word处理控件Spire.Doc教程:Python提取Word文档中的文本、图片、表格等
  • Excel商业智能分析报表 【销售管理分析仪】
  • 百度翻译详解:包括PaddleNLP、百度AI开放平台、接口逆向(包括完整代码)
  • Android工程命令行打包并自动生成签名Apk
  • Go语言高并发价格监控系统设计
  • 向量空间模型
  • 从exec到Shell:深度解析Linux进程等待,程序替换与自主Shell实现
  • 抛出自定义异常
  • Android UI 组件系列(九):ListView 性能优化与 ViewHolder 模式实战