1.把你要发布的程序单独放到一个文件夹下

2.在文件夹下创建一个sh脚本名为pack.sh
输入以下内容

#!/bin/sh
exe="app" #你需要发布的程序名称
des="/home/zzh/RadarDataHub" #程序所在路径
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des

脚本很简单,就是利用ldd获取程序依赖库,然后找到依赖路径,通过cp命令caopy过来。

你也可以自己通过ldd命令看到库路径

然后执行

sh ./pack.sh

执行完成之后你会发现所需依赖环境都copy到程序所在路径下了

然后在当前路径下创建一个sh脚本,你可以随意起个名字

touch test.sh

输入如下内容

#!/bin/sh
appname=app #要运行的程序名
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"

上面这段代码会自动根据当前用户运行路径来自动配置程序依赖库路径。

然后运行:

sh ./test.sh

一直以sh方式运行不太好,我们可以赋予它可执行权限,并改个名字,这样看起来就和运行程序没有区别了

mv test.sh test
chmod 777 test

然后在运行

./test

这样你把这个程序发布给其它平台就无需配置用户的/usr/local/lib路径了。

但是这个方法只能用在安装与你当前环境一致的QT系统上,无法放到一个纯净的Linux发行版上运行,如果运行会出现:

qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in "platforms"
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.Aborted (core dumped)

这句话的意思是找不到QT的xcb插件,也显示了xcb插件在platforms目录下

到你的QT安装目录下的plugins目录可以找到这个插件

libqxcb.so就是xcb插件。

plugins下放着许多插件,如果你用到一些绘图函数之类的可能也会用到这个目录下的插件,所以打包需要把目录一并打包过去。

重点是打包过去了会不会缺少依赖,比如libqxcb.so会不会出现缺少依赖,我们可以写一个脚本把目前qt缺少的插件依赖包含进来

为了不影响到原库,我们把plugins文件夹压缩一下

zip -r plugins.zip plugins

然后把压缩包复制到你刚刚的程序目录

cp plugins.zip /home/name/app

然后执行下列命令

unzip plugins.zip && cp -r plugins/* . && rm -rf plugins && rm plugins.zip

这样qt插件就已经被我们复制到运行目录下了,这样还是不够的,因为有一些依赖不在plugins目录下,所以我们要把libqxcb.so的依赖copy过来,使用最开始的ldd脚本就可以了

首先进入到platforms目录下

新建一个脚本

vim ldd_qxcb.sh

然后输入如下脚本内容:

#!/bin/sh
exe="libqxcb.so"
des="$(pwd)/../"
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des

然后你就可以把它发布到任何一台机器上,没有任何环境依赖。

经过我测试是OK的。

不同环境可能不一样,但是如果有这种问题,你可以ldd看一下libqxcb少什么库,然后到你的开发环境中把它找出来并复制过来。

或者你可以使用debug方式来调试:

export QT_DEBUG_PLUGINS=1

然后运行你的程序就会报出相关错误:

还有一个方法,如果你不想有那么多依赖,只有platforms的依赖,你可以使用

export QT_QPA_PLATFORM_PLUGIN_PATH=platforms

指定你的platforms的目录,前提是platforms目录下的libqxcb.so是没有缺失依赖的。

如若有缺失,因为ldd是默认/usr/lib为路径,如果想确认到底缺什么,可以先把LD_LIBRARY_PATH指向当前库目录在用ldd看一下,就能准确看出当前库目录里缺少哪些库

export LD_LIBRARY_PATH=./

最后需要保证你的可执行程序和lib库在同一目录,即便设置了LD_LIBRARY_PATH,否则依然会出现xcb的错误

Linux下打包qt程序,可以发布到一台纯净的linux发行版系统上相关推荐

  1. linux下将qt程序打包成appimage程序

    linux下将qt程序打包成appimage程序 一.环境准备 1.1下载linuxdeployqt的程序(打包qt程序的工具) https://github.com/probonopd/linuxd ...

  2. Linux环境打包Qt程序并部署到Docker容器

    Linux环境打包Qt程序并部署到Docker容器 根据项目需要,将UKylin版本的qt应用程序打包并且部署到docker容器中 系统版本 UKylin版本:Ubuntu18.04 Docker镜像 ...

  3. 命令行下打包Qt程序

    命令行下打包Qt程序 上一节我们说了 命令行下编译Qt程序 https://blog.csdn.net/weixin_42837024/article/details/81945656 现在基于上次继 ...

  4. linux cp并打包目录,【linux】【qt5】【将linux下的qt程序打包发布(完全适用于中标麒麟)】...

    前言: 最近因项目需求,需要打包linux-qt程序给客户先用一下子.百度一大堆终于找了几个靠谱的来综合一下,留为备用吧. 由于是先遣版所以仅制作为免安装程序的格式. 正文: 博主的qt是5.9.2的 ...

  5. linux下测试qt程序代码覆盖率(gcov,lcov)

    代码覆盖率是指:在测试中,所执行的源代码占全部源代码的比例. 1.linux系统下可以用使用Qtcreator 自带的单元测试工具框架QTestlib进行测试. https://blog.csdn.n ...

  6. linux下运行python程序如何控制内存_用Python实现Linux系统占用指定内存,CPU满载,服务器压力测试,场景设计...

    背景 提出两个需求 占满系统CPU 占用大内存 通过上网查资料,做实验使用Python实现了上述两个需求. 先看效果 执行前 内存 CPU 执行后 内存 CPU 代码实现 环境说明:代码使用Pytho ...

  7. linux下使用AppImage打包qt程序

    linux下使用AppImage打包qt程序 下载工具 1.1 linuxdeployqt 下载地址:https://github.com/probonopd/linuxdeployqt/releas ...

  8. linux下qt多个程序打包,解决Ubuntu下使用linuxdeployqt打包Qt程序问题

    写了点Qt界面程序,然而发现很难移植到其他没有安装Qt环境的电脑上运行.查资料了解到,在windows上有windowsdeployqt程序,linux上有linuxdeployqt可以帮助我们快速打 ...

  9. linux下打包C++ Qt可执行程序出现的问题总结

    linux下打包C++ Qt可执行程序 零.问题描述 一.出现的问题和解决方法 二.通过配置脚本设置环境变量 零.问题描述 最近在搞linux下打包程序,由于使用了Qt相关的函数接口,出现了很多Qt相 ...

最新文章

  1. android String.format
  2. 在线作图|如何绘制带分组的散点图
  3. ebs查看服务状态_Oracle EBS - 工单状态
  4. python字典程序题_python字典练习题
  5. [转] 为什么javascript是单线程的却能让AJAX异步调用?
  6. iOS学习资源(一)
  7. Docker容器压力测试查看CPU权重
  8. 独舞风雪夜 跟我学mvc系列
  9. 还是两个数的交换问题
  10. 科技在进步,一文带你看看 MATLAB R2020a 为工程师和科学家带来哪些 AI 功能?
  11. 解决Git中的fatal: refusing to merge unrelated histories
  12. java build返回空值_OKHTTP拦截器不断返回空值并使应用程序崩溃
  13. Vivado生成bit文件布局失败解决
  14. epoll编程实例客户端_深入底层探析网络编程之多路复用器(select,poll,epoll)
  15. 很久没写了,今天兴致来了,写一下!
  16. OEA ORM 框架中的冗余属性设计
  17. python里面Dataset干嘛的_用 Python 对成绩分类汇总!
  18. 酷q点歌机器人软件_酷q_酷q机器人官方下载[最新版]-下载之家
  19. echarts立体柱状图
  20. Linux/debian/ubuntu/deepin 等系统禁用鼠标中键(滚轮)按下粘贴的方法

热门文章

  1. 写笔记插件_如何构建自己的笔记知识体系?
  2. 通过内网穿透 将本地端口 使其外网可以进行访问 使用花生壳内网穿透 网站访问
  3. linux的网络配置有线线缆被拔出
  4. 那个抗血栓机器人_美国DJO抗血栓压力袜
  5. 云端服务器只能查看文件,云端服务器只能查看文件夹
  6. java调度问题的贪心算法_java代码,多机调度问题,怎么解释
  7. MYSQL数学函数哪些事
  8. tomcat启动慢, Creation of SecureRandom instance for session ID generation using [SHA1PRNG]took [xx] mil
  9. docx文档怎么排列图片_PDF怎么转Word?这几款软件满足你的要求
  10. mysql长连接_mysql.connector 数据库长连接