Ubuntu qt(二)—— qt程序打包在未安装qt的系统下能够运行

Ubuntu qt程序打包教程

  1. 首先使用QT编译需要打包的工程,编译一个release版本,例如得到一个执行文件test;

  2. 在任意目录下创建一个目录test-pack;

  3. 在该目录下新建一个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
    
  4. 在当前目录打开终端,运行:./copylib.sh test
    其中, test是运行copylib.sh 脚本的参数,脚本调用了 ldd test指令来获取test运行时需要用到的库,并将库文件复制到当前目录的lib文件夹中。

  5. 进入qt安装目录的platforms文件夹,我的路径是:/opt/Qt5.12.3/5.12.3/gcc_64/plugins/platforms
    然后将整个文件夹复制到打包的目录中;
    将上述的copylib.sh脚本复制到test-pack/platforms目录中,然后运行./copylib.sh libqxcb.so,这时会得到 libqxcb.so的库文件夹。
    (之所以需要用libqxcb.so的库文件,具体看文末的参考资料,这个跟运行的具体程序有关,需要用到哪些QT的库,就再打包对应的库和其依赖的库)

  6. 将第5步骤中生成的所有库,复制到test-pack目录中,然后删除掉Giptables/platforms目录;

  7. 在test-pack目录中新建一个运行脚本test.sh,目的是添加库的环境变量,至此就打包完成了,运行程序时执行test.sh脚本即可,注意脚本执行前记得设置执行权限,命令:sudo chmod +x test.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
    export QT_QPA_PLATFORM_PLUGIN_PATH=./
    $dirname/$appname "$@"
    
  8. 最后可以用deb包的方式,打包deb包,然后在新的机器上安装使用。

ps:过程中可能遇到的问题:
1、运行copylib.sh时报找不到库的错误:必须保证在源文件夹中运行copylib.sh,而不能先将文件复制出来,然后再运行copylib.sh生成lib
2、在目标主机中提示 This application failed to start because it could not find
or load the Qt platform plugin “xcb”
这是因为没有生成libqxcb.so的库文件夹,或者没有将生成的文件夹中所有的文件放到giptables.sh同一级目录下

参考资料 http://doc.qt.io/qt-5/linux-deployment.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yizhou_1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值