运行环境:虚拟机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
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脚本,而不是二进制文件