linux环境打包QML程序

第一次打包linux下的QML程序,一路磕磕绊绊,如果有更好的方式,欢迎留言。

1、使用release编译出可执行文件,这一步大家都知道吧;

2、将可执行文件放入新建文件夹project中,同时创建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

然后在文件夹目录中执行

./copylib 可执行文件

此时会多出一个文件夹lib,可执行文件用到的一些库会被塞进lib文件夹里,我们把lib/中的内容都拷贝到project中,即与lib同级目录,然后删除lib文件夹;

3、将copylib.sh复制到Qt/6.5.3/gcc_64/plugins/platforms目录中,执行

./copylib.sh libqxcb.so

此时会生成libqxcb.so的库文件,并存储在/platforms/lib中,此时将整个platforms文件拷贝到project文件中,并将Qt/6.5.3/gcc_64/plugins/platforms/lib与copylib.sh删除;

4、将project/platforms/lib中的文件都拷贝到project/中,并删除project/platforms/lib文件夹,到这一步,QWidget程序就可以运行了,但如果是QML,则需要继续;

5、将Qt/6.5.3/gcc_64/qml整个文件夹拷贝到project/下;

6、将Qt/6.5.3/gcc_64/plugins/xcbglintegrations整个文件夹拷贝到project/下;

7、将Qt/6.5.3/gcc_64/lib整个文件夹拷贝到project/下;

8、在project/下创建可执行文件.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=./lib

export LD_LIBRARY_PATH

$dirname/$appname "$@"

 一些改进:第五步中不用将整个qml文件夹拷贝进项目文件夹,其实只需要将qml中用到的具体模块拷贝进来,第七步中也不用将整个lib拷贝进来,可以直接运行打包后的sh脚本,此时会报错,缺少哪个库,就拷贝哪个库。并且把LD_LIBRARY=./lib改为LD_LIBRARY=¥dirname。

加载失败的库,一般都是它的其他依赖库找不到了,可以从对应的qml模块中找到,在qml模块中添加copylib.sh文件,然后执行./copylib.sh 加载失败的库,会生成一个lib文件夹,在里边把对应的依赖库复制到项目文件夹中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值