Linux下QT程序打包

用QT开发完之后,需要在其他Linux系统平台运行,那么如何打包QT程序呢?

一、准备两个脚本

ldd.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

xxxx.sh脚本
注意该脚本的名称必须和程序名一致。

#!/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 "$@"

给这两个脚本加权限

chmod 777 xxxxx.sh

二、打包过程

1.添加程序依赖库
(1)新建一个空的文件夹,用于存放程序及其动态库

(2)将ldd.sh脚本复制到编译目录

(3)执行“./ldd.sh xxxxxxxxx”,会在当前目录生成lib文件夹。其中存放着运行xxxxxxxxx所依赖的库文件;

(4)将lib文件夹中的所有文件复制到第1步新建的文件夹中的lib文件夹中。至此,就可以删除生成的lib文件夹和ldd.sh脚本了.

2. 添加 Qt 相关依赖库

(1)将ldd.sh脚本复制到Qt5安装目录(…/Qt5.12.0/5.12.0/gcc_64/plugins/platforms)的platforms文件夹中;

(2)执行**“./ldd.sh libqxcb.so”,将生成的lib文件夹中的所有文件拷贝到新建文件夹中的lib**文件中。有些库可能重复,点击“替换”即可。执行完该步骤后就可以删除生成的lib文件夹和ldd.sh脚本了;

(3)返回上一级,将platforms整个文件夹拷贝到新建文件夹中,层级关系如下图;
在这里插入图片描述

(4)最后将xxxxxxx.sh脚本拷贝到新建文件夹中即可。然后将整个“新建文件夹”压缩就可以在其他机器上解压缩后运行。

移至其他平台会遇到权限问题,可通过以下命令,给xxxx文件夹里所有文件加权限
chmod -R 777 xxxx

附上在打包过程中肯会遇到的问题

经过上网查询,这个问题主要是platforms文件夹中libqxcb.so的依赖库没有拷贝导致的。可是如何拷贝依赖库,是个大问题!
在程序当前目录下输入ldd platforms/libqxcb.so后,提示/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 “not found”,去原linux电脑中,确实找到了libQt5XcbQpa.so.5文件,但把这个文件拷贝到release所在目录下并没有效果!
研究了一天,才明白libQt5XcbQpa.so.5文件是链接文件!使用ls -al可以找到链接文件对应的源文件!把源文件拷贝到release目录下,再新建一个相同名字的链接文件,才算完成了这个libQt5XcbQpa.so.5资源文件的打包!!
新建链接文件的命令:ln -s $PWD/libQt5XcbQpa.so.5.8.0 libQt5XcbQpa.so.5。

  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值