在Linux下(ubuntu)打包QT程序

本文参考:打包QTlinux

前言

如何在linux下打包免安装程序,程序名称(项目名称)为CoinFlip,QT版本是5.11.3,如下如出现这个名称,则一概替换成读者本身的应用程序名称。web

建立程序的运行文件夹

  1. 建立空文件夹coinflip,这个将用来存放CoinFlip程序的运行文件

编译程序

  1. 先将工程使用Release模式编译
  2. 打开编译输出文件的文件夹(带二进制文件CoinFlip的那个,笔者的文件夹名称为:build-CoinFlip-Desktop_Qt_5_11_3_GCC_64bit-Release)

新建.sh文件

  1. 在上一步的文件夹中(工程用Release模式编译后的获得的文件夹build-CoinFlip-Desktop_Qt_5_11_3_GCC_64bit-Release)新建文件copylib.sh
    打开终端进入当前文件夹,输入命令(新建文件命令)touch copylib.sh
    vim

  2. 经过指令设置权限chmod 777 copylib.sh
    打开终端进入当前文件夹,输入命令chmod 777 copylib.sh
    bash

  3. 在 copylib.sh 中加入内容
    打开终端进入当前文件夹,输入命令vim copylib.sh,进入到copylib.sh文件中;
    按下键盘上的 i 进入插入模式,将下述代码写入到文件中;
    按下键盘上的esc(左上角的按键)退出插入模式
    按下键盘上的 ":wq "(引号里面的这三个键) 保存退出
    app

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

生成CoinFlip的库文件

  1. 打开终端并进入到当前文件夹,输入./copylib.sh CoinFlip
    其中, CoinFlip是运行copylib.sh 脚本的参数,脚本其实是调用了 ldd CoinFlip指令得到CoinFlip运行时须要哪些库,并将库都复制放到当前目录的lib文件夹中。
    运行完上述指令后,同目录下会生成lib文件夹,这里咱们将其称做CoinFlip的库文件夹,避免与下文内容混淆svg

  2. CoinFlip的二进制文件和== CoinFlip的库文件夹==里全部的文件复制到coinflip文件夹(这个文件夹是笔者刚开始新建的文件夹,注意大小写)中,输入:
    sudo cp -rf CoinFlip的库文件路径(源文件夹路径) coinflip文件夹路径(目标文件夹路径)

    注意:这里是把lib里的全部文件复制出来,不用复制lib文件夹,源文件路径后面加上/*ui

生成libqxcb.so的库文件

  1. CoinFlip的二进制文件中的copylib.sh复制到QT的安装目录中的platforms文件夹,笔者的路径是:~/Qt5.11.3/5.11.3/gcc_64/plugins/platforms,输入:
    sudo cp -rf CoinFlip的库文件路径(源文件路径) platforms文件夹路径(目标文件夹路径)
    spa

  2. 终端进入到platforms文件夹下,运行 ./copylib.sh libqxcb.so
    这时会获得lib文件夹——libqxcb.so的库文件夹,该文件夹中包括程序运行时所须要的QT库.net

  3. 将libqxcb.so的库文件夹中的全部文件复制coinflip文件夹中,而后删除掉Giptables/platforms/lib文件夹, 输入:
    sudo cp -rf libqxcb.so的库文件夹/*(源文件路径) coinflip文件夹路径(目标文件夹路径)
    code

创建脚本文件(运行程序时的.sh文件)

  1. 在coinflip文件夹中新建脚本CoinFlip.sh ,终端进入到该文件夹下,键入:
    touch CoinFlip.sh(特别注意:这里的文件夹名称,是程序名称)
    执行chmod 777 giptables.sh,键入:
    chmod 777 CoinFlip.sh
    进入该文件,并设置成插入模式进行编辑,键入命令:
    vim CoinFlip.sh,进入到该文件中,按下键盘上的 i 键
    并在其中加入以下代码:
#!/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 "$@"

运行程序

  1. 到这里就基本完成了,将coinflip文件夹复制到须要运行程序的目标主机便可,在目标主机中,运行程序,都采用 ./coinflip.sh 而不是./coinflip,即运行程序的sh脚本,而不是二进制文件

特此声明:本文是参考:打包程序