Linux下QT程序发布

运行环境:虚拟机Red Hat Enterprise 6.3 64位

                QT版本是qt-opensource-linux-x64-5.6.3


QT程序发布的主要步骤如下:

注意:程序名为blockingfortuneclient,可以替换为自己的程序名。

0.找个地方,比如在plj目录下,创建空文件夹clientlib文件夹,这个将用来存放blockingfortuneclient程序的运行文件及相关库

1. 将可执行程序以Release版本编译,然后再运行。在工程目录下会生成对应的文件夹build-blockingfortuneclient-Desktop_Qt_GCC_64bit-Release

Linux下QT程序发布_第1张图片

2.在上一步的文件夹(build-blockingfortuneclient-Desktop_Qt_GCC_64bit-Release)中新建文件copylib.sh,通过指令设置权限chmod 777 copylib.sh 

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 blockingfortuneclient

其中, blockingfortuneclient 是运行copylib.sh 脚本的参数,脚本实际上是调用了 ldd blockingfortuneclient指令获得blockingfortuneclient运行时需要哪些库,并将库都复制放到当前目录的lib文件夹中。

运行完上述指令后,同目录下会生成lib文件夹,这里我们将其称作blockingfortuneclient的库文件夹,避免与下文内容混淆

6、将blockingfortuneclient的二进制文件和 blockingfortuneclient的库文件夹里所有的文件复制到clientlib文件夹中,注意:这里是把lib里的所有文件复制出来,不用复制lib文件夹

7、进入QT的安装目录,找到platforms文件夹,我的路径是

/usr/local/qt5/5.6.3/gcc_64/plugins/platforms

 复制copylib.sh到/usr/local/qt5/5.6.3/gcc_64/plugins/platforms文件夹中,然后再运行./copylib.sh libqxcb.so,这时会得到lib文件夹——libqxcb.so的库文件夹 ,

8.将libqxcb.so的库文件夹中的所有文件复制clientlib文件夹中,然后删除掉platforms/lib文件夹

9.在clientlib文件夹中新建脚本blockingfortuneclien.sh,执行chmod 777 blockingfortuneclien.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 "$@"
到这里就基本完成了,将 clientlib文件夹 复制到需要运行程序的目标主机即可,在目标主机中,运行程序,都采用  ./blockingfortuneclient.sh 而不是 ./blockingfortuneclient ,即运行程序的sh脚本,而不是二进制文件

你可能感兴趣的:(Linux下QT程序发布)