Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)

问题描述

软件开发完毕之后需要打包Qt程序,将程序放到没有安装Qt开发环境的电脑上运行,在Ubuntu18.04开发环境下打包有两种方式。(本项目在)

方式一

第一种方式是利用linuxdeployqt软件进行打包,不过由于Ubuntu18.04操作系统版本太高,在Ubuntu18.04上需要重新编译linuxdeployqt软件。重新编译的过程需要注释部分不兼容的源码。由于该方式经测试打包依旧无法运行,故在此不做具体介绍。

方式二

第二种方式是利用编写shell脚本的方式进行打包。打包的具体流程如下:

  1. 新建一个空的文件夹,用于存放程序和动态链接库。如“package”文件夹。
  2. 准备脚本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
  1. 准备脚本xxxx.sh。(xxxx.sh表示该脚本名称必须和程序名一致。如:本项目的可执行文件为uidemo01,命名该脚本为uidemo01.sh)
#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
VLC_PLUGIN=$PWD/plugins
echo $VLC_PLUGIN
LD_LIBRARY_PATH=$dirname
export VLC_PLUGIN_PATH=$VLC_PLUGIN
echo $LD_LIBRARY_PATH
export LD_LIBRARY_PATH
$dirname/$appname "$@"
  1. 给上述两个脚本添加可执行权限。在shell里面执行如下两行命令。
    sudo chmod 777 copylib.sh
    sudo chmod 777 uidemo01.sh
  2. 将qt creator切换为release模式,在编译文件夹下生成uidemo文件。
    Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)_第1张图片
  3. 添加程序依赖库.。
    首先将该文件复制到package文件夹下。
    Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)_第2张图片
    在该文件夹下执行./copylib.sh uidemo01命令。
    在这里插入图片描述
    执行完后package目录中会生成lib文件夹。
    Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)_第3张图片
    将lib文件夹下面的库拷贝到package文件夹下面。
    在这里插入图片描述
    至此完成了添加程序依赖库的部分。
  4. 添加Qt相关依赖库。
    将copylib.sh复制到Qt5安装目录的platforms文件夹当中。
    Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)_第4张图片
    在当前文件夹下执行./copylib.sh libqxcb.so命令。
    在这里插入图片描述
    将lib目录下的库复制到package文件夹下,部分库可能重复,点击“替换”即可。
    Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)_第5张图片
    接下来返回上一级,将platforms整个文件夹拷贝到package文件夹下。此时的目录结构如下。
    Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)_第6张图片
  5. 添加VLC初始化插件。(在项目中没有用到VLC库的可以跳过此步骤)
    对于使用了VLC第三方库的应用来说这步很重要,不然会出现段错误。出现段错误的原因往往是因为未初始化就使用,或者是初始化失败。这个问题在本项目中出现的原因VLC在使用初始化过程中会自动初始化其插件。将VLC插件的文件夹plugins/拷贝到上述打包文件夹下,并在启动脚本当中设置临时环境变量,已写入上述uidemo.sh文件当中。
    切换到/usr/lib/x86_64-linux-gnu/vlc下。
    在这里插入图片描述
    执行cp -r plugins/ /home/zhangben/Desktop/package。将VLC的初始化插件复制到打包文件夹下。打包完成后的文件目录结构如下。
    Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)_第7张图片
    此时package文件夹即可作为打包完成的文件发布。
  6. 软件运行
    切换到package文件夹下,在当前文件夹下执行./uidemo01.sh即可运行软件。

容易出现的报错及解决方案

  1. 在装有Qt的虚拟机内程序正常运行,在未装有Qt的虚拟机内程序吐核,显示core dumped并异常退出。显示如下:
    Ubuntu18.04平台下Qt开发程序打包的一些问题总结(包含VLC第三方库的打包)_第8张图片
    问题分析:出现吐核是因为程序在打包的过程中需要打包Qt的运行环境,也就是platforms文件夹和对应的库。
    解决方案:检查上述打包过程的第7步是否正确运行。

解决打包问题的几种常用思路

  1. 多用ldd工具进行动态链接库的分析。
  2. 检查打包文件夹下是否正确包含了对应的初始化或者是动态链接库文件夹。

你可能感兴趣的:(Qt,Shell)