QT 将可执行文件生成可以在其他Linux下运行的包

说实话这个问题搞了好久,错误原因很简单,但是一开始没有往哪里想,这里总结一下,为后面再次弄得时候打个样

1、将可执行文件拷贝出来(和Windows下的exe相同的文件),放在一个新文件夹下面
2、生成pack.sh脚本,用来导出需要的库文件(可以向通过ldd命令查看要那些库文件)

#!/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

3、在QT安装目录下找到platforms文件夹,在这个文件夹下通过终端运行这个脚本,先将后面需要的动态库生成一下,否则后面会出问题(qt.qpa.plugin: Could not load the Qt platform plugin "xcb")
运行脚本的命令为

./pack.sh   libqxcb.so

这个时候platforms文件夹下会生成一个lib文件夹先不用管,后面用
4、然后将整个platforms拷贝到存放可执行文件的文件夹中
5、这个时候同样使用第二步中的脚本,在存放可执行文件的目录下打开终端,运行命令

./pack.sh   ****(这里指你的可执行文件名称)

6、此时先将本次lib中的文件剪切或者复制都行,复制到可执行文件目录下
7、然后将platforms文件夹下的lib文件夹下的文件,复制或剪切到可执行文件目录下,若有同名的替换即可
8、这个时候生成和你可执行文件同名的脚本,(****.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 "$@"

9、此时还需要将你的plugins下的部分依赖文件拷贝到可执行文件所在的文件夹下

10、这个时候就算大功告成,但是有一点需要注意,在运行前要将你的可执行文件和可执行文件的.sh脚本文件都通过终端赋值可运行权限,因为个人发现,如果通过U盘移动的话,赋值的权限就不在了,所以使用前赋值就可

chmod +x 可执行文件  可执行文件.sh
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值