【linux】【qt5】【将linux下的qt程序打包发布(完全适用于中标麒麟)】

ⅰ亾dé卋堺 提交于 2020-02-09 00:59:31

前言:

  最近因项目需求,需要打包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.

 


 

 

注,

  1. 全程对库文件夹的拷贝都是拷贝文件夹里面的内容,而不需要带lib目录。我们的层次结构OCS/platforms/,没有其他。
  2. 查找platforms文件方法:find / -name "platforms".
  3. 拷贝文件夹:cp -R xx/xx xxx/
  4. 无视名称移动文件:mv -f xx/xx/xx/

 

  

后记:

  linux下免安装打包就到这里了,遇到问题欢迎留言哦。

 

 

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!