Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)
本文介绍如何打包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安装路径,不要忘记再修改回来。
Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)的更多相关文章
- 【最详细最完整】在Linux 下如何打包免安装的QT程序?
在Linux 下如何打包免安装的QT程序? 版权声明:嵌入式linux相关的文章是我的学习笔记,基于Exynos 4412开发板,一部分内容是总结,一部分是查资料所得,大家可以自由转载,但请注明出处! ...
- 导入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 ...
- Linux下免安装mysql
我是使用免安装的包mysql-5.6.30-linux2.6-x86_64.tar.gz(在http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6 ...
- linux源码安装服务器所需要的一些依赖库(待完善)
apaeche :yum -y install gcc gcc-c++ zlib zlib-devel openssl openssl-devel cmake kernel-devel pcre-de ...
- [daily][CentOS][yum] 删除包的同时一同清理掉安装时一起装进来的依赖包
说起来有点绕口,这个需求是这样的. 就是我yum装A包的时候,同时安装了A的依赖包a1,a2,a3. 当我们使用yum remove A卸载A包的是,a1,a2,a3包并不会一同被卸载掉.如果他们没有 ...
- linux下免安装版本mysql5.5 配置
进入/usr/local #cd /usr/local 下载 #wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.39-linux ...
- Linux下免安装版sublime text 3显示图标
执行如下命令 sudo vim /usr/share/applications/sublime_text_3.desktop 根据个人存放位置添加如下内容信息: [Desktop Entry] Enc ...
- Linux 打包QT程序到未安装QT的其他Linux主机下运行
昨天终于改好了一个开源但是用起来有问题的串口调试助手,想把它打包一下以后在其他电脑上也可以用. 找了网上的一个教程打包后,在本机上可以正常使用,但是移植到另一台上就出现缺少xcb的提示. 上网搜资料倒 ...
- 【转】Python3 (入门6) 库的打包与安装
Python3 (入门6) 库的打包与安装 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/6940288 ...
随机推荐
- centos安装nvidia驱动
大部分 Linux 发行版都使用开源的显卡驱动 nouveau,对于 nvidia 显卡来说,还是闭源的官方驱动的效果更好.最明显的一点是,在使用 SAC 拾取震相的时候,使用官方显卡驱动在刷新界面的 ...
- Linux 磁盘管理及分区
硬盘结构和基础知识 扇区(Sector)为最小的物理储存单位,每个扇区为512 bytes,将扇区组成一个圆就是磁道(track),不同磁盘的相同磁道组成磁柱(Cylinder),磁柱是分区(par ...
- suse 11 sp4 bond 网卡 mode0模式
开启网卡: ifocnfig eth1 up 点亮网卡ethtool eth1 db2:~ # cat /etc/sysconfig/network/ifcfg-bond0 DEVICE='bond0 ...
- 总结使人进步,可视化界面GUI应用开发总结:Android、iOS、Web、Swing、Windows开发等
可视化界面的软件,是21世纪最主流的应用类型了,黑屏控制台的不适合普通用户. 2004年左右的时候,作为普通网民,接触的自然是可视化,准确是Windows那一套. 那个时候,Microsoft ...
- 【BZOJ 1193】 [HNOI2006]马步距离
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 原问题可以等价为两个点. 然后其中一个点要移动到另外一个点. 那么我们可以把左下角那个点(对称总是可以得到一个点在左下角)放在原点的 ...
- Mysql学习总结(21)——MySQL数据库常见面试题
1. 如何使用SELECT语句找到你正在运行的服务器的版本并打印出当前数据库的名称? 答:下面的语句的结果会显示服务器的版本和当前的数据库名称 mysql> SELECT VERSION(), ...
- 低价购买 洛谷1108 codevs4748 dp
首先,,我相信第一问是可以做出来的,,,做不出来自行面壁思过,,, 第二问,我们可以发现,如果f[i]为1时应该将其g[i]初始化为1,当初就是因为这个wa了一个世纪,之后先考虑不需要判重时的情况,如 ...
- php如何实现简繁体互转
php如何实现简繁体互转 一.总结 一句话总结:大部分字是一样的,只转不同的即可 具体转换就是在映射表中找对应的即可 1.简繁体转换的常见问题是什么? 能否智能转换,就是词组, 例如:简体“ 皇后 ” ...
- 修改host方法
打开路径 C:\Windows\System32\drivers\etc 将hosts文件拷贝出来修改之后放回去覆盖即可 以下是一个例子,想得到ip可以先ping一下那个域名. 左边是ip,右边是域名 ...
- Signal programming
Signal programming is used in the same sense as dataflow programming, and is similar to event-driven ...