本文介绍如何打包Qt程序,使其在没有安装Qt的系统可以运行。

默认前提:另外一个系统和本系统是同一个系统版本。

1,编写导出依赖包的脚本copylib.sh

#!/bin/bash

LibDir=$PWD"/lib"
Target=$1 lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*")) $(mkdir $LibDir) for Variable in ${lib_array[@]}
do
cp "$Variable" $LibDir
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

更改可执行权限

chmod u+x copylib.sh
  • 1
  • 2

2,打开终端并进入到存放程序的(假设叫MyRelease)文件夹,运行下面命令(假设程序叫MyApp)

./copylib.sh MyApp
  • 1
  • 2

在此目录下会自动生成lib文件夹,脚本实际上是调用了 ldd MyApp指令获得MyApp运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中。

3、把lib里的所有文件剪切到 MyRelease目录下,并删除此lib文件夹。

4、进入QT的安装目录,找到platforms文件夹,本文路径是

/opt/Qt5.3.1/5.3/gcc_64/plugins/platforms/
  • 1
  • 2

将整个platforms文件夹复制到MyRelease文件夹中,注意:这时复制的是整个文件夹,这使得MyRelease文件夹中会多出一个platforms文件夹。

5、将上文的copylib.sh放到MyRelease/platforms/中,并运行

./copylib.sh libqxcb.so
  • 1
  • 2

这时在当前目录会得到新的lib文件夹。 
将lib里的所有文件剪切到 MyRelease目录下,并删除此lib文件夹

6、在MyRelease文件夹中新建程序启动脚本MyApp.sh(脚本名称和App名称相同)

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,` dirname=`dirname $0`
tmp="${dirname#?}" if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

更改可执行权限

chmod u+x MyApp.sh
  • 1
  • 2

7、测试程序 
修改Qt的安装路径名称,如 /opt/Qt5.3.1/5.3 修改为 /opt/Qt5.3.1/5.311, 
修改后,运行程序时就不能找到安装目录里的库文件了。

sudo mv /opt/Qt5.3.1/5.3/ /opt/Qt5.3.1/5.311
  • 1
  • 2

这样就可在本机上做测试了。

在MyRelease文件夹下运行

./MyApp.sh
  • 1
  • 2

可能会报错:

This application failed to start because it could not find or load the Qt platform plugin "xcb".

Available platform plugins are: xcb.

Reinstalling the application may fix this problem.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

解决办法:

如果你修改了Qt安装路径名称,现在先修改回来,如:

sudo mv /opt/Qt5.3.1/5.311 /opt/Qt5.3.1/5.3
  • 1
  • 2

在MyRelease文件夹发现存在了一个libQt5DBus.so.5库文件,但他只是一个符号链接,需要把它补全。

[user@localhost]$ locate libQt5DBus
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.la
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.prl
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3.1
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

把这两个库文件

/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3
/opt/Qt5.3.1/5.3/gcc_64/lib/libQt5DBus.so.5.3.1
  • 1
  • 2
  • 3

拷贝到MyRelease文件夹下,然后再次运行启动脚本。

先修改路径(用以本地测试)

sudo mv /opt/Qt5.3.1/5.3/ /opt/Qt5.3.1/5.311
  • 1
  • 2

运行启动脚本

./MyApp.sh
  • 1
  • 2

OK,程序启动成功。

现在可以把MyRelease打包成压缩包,拷贝到其他系统上去运行了。

友情提示,测试完毕,如果修改了Qt安装路径,不要忘记再修改回来。


本文参考:http://blog.csdn.net/z3512498/article/details/64922180

官网参考: http://doc.qt.io/qt-5/linux-deployment.html

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zbc415766331/article/details/78108466

Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)的更多相关文章

  1. 【最详细最完整】在Linux 下如何打包免安装的QT程序?

    在Linux 下如何打包免安装的QT程序? 版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! ...

  2. 导入spark程序的maven依赖包时,无法导入,报错Unable to import maven project: See logs for details

    问题:导入spark程序的maven依赖包时,无法导入,且报错:0:23 Unable to import maven project: See logs for details 2019-08-23 ...

  3. Linux下免安装mysql

    我是使用免安装的包mysql-5.6.30-linux2.6-x86_64.tar.gz(在http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6 ...

  4. linux源码安装服务器所需要的一些依赖库(待完善)

    apaeche :yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel cmake kernel-devel pcre-de ...

  5. [daily][CentOS][yum] 删除包的同时一同清理掉安装时一起装进来的依赖包

    说起来有点绕口,这个需求是这样的. 就是我yum装A包的时候,同时安装了A的依赖包a1,a2,a3. 当我们使用yum remove A卸载A包的是,a1,a2,a3包并不会一同被卸载掉.如果他们没有 ...

  6. linux下免安装版本mysql5.5 配置

    进入/usr/local #cd /usr/local 下载 #wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.39-linux ...

  7. Linux下免安装版sublime text 3显示图标

    执行如下命令 sudo vim /usr/share/applications/sublime_text_3.desktop 根据个人存放位置添加如下内容信息: [Desktop Entry] Enc ...

  8. Linux 打包QT程序到未安装QT的其他Linux主机下运行

    昨天终于改好了一个开源但是用起来有问题的串口调试助手,想把它打包一下以后在其他电脑上也可以用. 找了网上的一个教程打包后,在本机上可以正常使用,但是移植到另一台上就出现缺少xcb的提示. 上网搜资料倒 ...

  9. 【转】Python3 (入门6) 库的打包与安装

    Python3 (入门6) 库的打包与安装 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/6940288 ...

随机推荐

  1. js禁止某个页面的回退

    ;!function(pkg, undefined){ var STATE = 'x-back'; var element; var onPopState = function(event){ eve ...

  2. GDOI2017 再次酱油记

    Day 0 13:00 pm 啊...今天中午一点钟从ez出发,感觉吼有趣啊.出发前先大喊一声****,在书包里放一本党史,感觉玄学可以救命[滑稽] 15:00 pm 到达东莞,坐标:石龙名冠金凯悦大 ...

  3. Linux ping 不通 域名 添加DNS

    修改路由配置文件 vi /etc/resolv.conf # Generated by NetworkManager #NDS nameserver 192.168.32.2 redhat7 系统优化 ...

  4. Keepalived原理及VRRP协议与应用配置(详细)

    转载自:https://blog.csdn.net/u010391029/article/details/48311699 1. 前言 VRRP(Virtual Router Redundancy P ...

  5. Oracle学习总结(7)—— 常用的数据库索引优化语句总结

    不管是用C/C++/Java等代码编写的程序,还是SQL编写的数据库脚本,都存在一个持续优化的过程.也就是说,代码优化对于程序员来说,是一个永恒的话题. 近期,我们对之前编写的数据库脚本进行了全面的自 ...

  6. 对于树的序列化,用了stream,很好

    https://leetcode.com/problems/serialize-and-deserialize-binary-tree/?tab=Description 下面这个解法里面的C++部分很 ...

  7. ACM POJ 1146 ID Codes

    题目大意:输入一个字符串.输出它的下一个字典序排列. 字典序算法思想: 1.从右向左寻找字符串找出第一个a[i]<a[i+1]的位置i; 2.从右向左找出第一个大于a[i]的元素a[j]; 3. ...

  8. Linux磁盘分区(一):加入

    ***********************************************声明************************************************ 原创 ...

  9. 【甘道夫】Sqoop1.99.3基础操作--导入Oracle的数据到HDFS

    第一步:进入clientShell fulong@FBI008:~$ sqoop.sh client Sqoop home directory: /home/fulong/Sqoop/sqoop-1. ...

  10. xcode5. 安装cocos2d-x 学习中。。。

    找了一些帖子  没搞出来,后来找到原因了   如今的cocos2d版本号在xcode.5上 没右模版了. 用命令行 来运行.看了官方的文档.最终攻克了--- 对于自己解决的问题都会感到点兴奋. .. ...