前言:
最近因项目需求,需要打包linux-qt程序给客户先用一下子。百度一大堆终于找了几个靠谱的来综合一下,留为备用吧。
由于是先遣版所以仅制作为免安装程序的格式。
正文:
博主的qt是5.9.2的,程序名称为ocs,下面看到这个名称替换成自己的就是了。
1.先找个地方,比如桌面创建一个名字为OCS的空文件夹用于放打包后的文件。
2.将项目使用Release模式编译并运行一遍(确保生成可执行程序ocs)。
3.打开程序输出目录(生成的那个可执行程序ocs的目录)。
博主的目录是build-ocs-Desktop-Release。
4.在上一部的目录中新建脚本copylib.sh。
5.在copylib.sh中加入一下内容,并通过指令赋值权限sudo chmod 777 copylib.sh。
1 #!/bin/bash 2 3 LibDir=$PWD"/lib" 4 Target=$1 5 6 lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*")) 7 8 $(mkdir $LibDir) 9 10 for Variable in ${lib_array[@]} 11 do 12 cp "$Variable" $LibDir 13 done
6.打开终端并进入当前文件夹,输入./copylib.sh ocs.
其中, giptables 是运行copylib.sh 脚本的参数,脚本实际上是调用了 ldd ocs指令获得ocs运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中。
7.运行完上述指令后,会在同目录下生成lib文件夹。
8.将ocs的可执行程序和上一步lib里面的文件全部复制到OCS文件夹中。并将lib文件删除。
9.进入qt的安装目录,找到platforms目录,博主的目录是:
/usr/lib64/qt5/plugins/platforms
10.将第5步的copy.sh放到platforms目录中,并运行./copylib.sh libqxcb.so,这时也会得到一个lib文件加-libqxcb.so的库文件夹。
注:xcb是移植的重要文件,如果拷贝错误将不能在目标主机运行。
11.将platforms文件夹整个拷贝到OCS,并删除原先文件夹中的libxcb.so库文件夹。
12.将拷贝后的库文件夹的东西全部放到OCS目录下。即将OCS/platforms/lib/* 拷贝到OCS下。并删除OCS/platforms/lib文件夹及其所属文件。
13.在OCS文件夹中新建脚本ocs.sh,添加下面内容后赋值赋值权限。chmod 777 ocs.sh 。
1 #!/bin/sh 2 appname=`basename $0 | sed s,\.sh$,,` 3 4 dirname=`dirname $0` 5 tmp="${dirname#?}" 6 7 if [ "${dirname%$tmp}" != "/" ]; then 8 dirname=$PWD/$dirname 9 fi 10 LD_LIBRARY_PATH=$dirname 11 export LD_LIBRARY_PATH 12 $dirname/$appname "$@"
到现在,可以将OCS文件夹拷贝到目标主机上运行了。在目标主机上运行程序是采用./ocs.sh运行,而不是直接点击ocs.
注,
- 全程对库文件夹的拷贝都是拷贝文件夹里面的内容,而不需要带lib目录。我们的层次结构OCS/platforms/,没有其他。
- 查找platforms文件方法:find / -name "platforms".
- 拷贝文件夹:cp -R xx/xx xxx/
- 无视名称移动文件:mv -f xx/xx/xx/
后记:
linux下免安装打包就到这里了,遇到问题欢迎留言哦。
来源:https://www.cnblogs.com/13373-/p/11467102.html