1,首先我是参考的这个链接https://blog.csdn.net/z3512498/article/details/64922180
方法如下:
1,找个地方,比如桌面,创建空文件夹AEightStandMaster【这个是我的应用程序的名字】
,这个将用来存放AEightStandMaster
程序的运行文件 .
2,先将工程使用Release模式编译 。编译完成之后。去你的release文件夹(带二进制文件AEightStandMaster
的那个)拷贝到你1步骤建立的文件夹里面去。
3,在上一步的文件夹中【也就是release文件夹】新建文件copylib.sh,通过指令设置权限chmod 777 copylib.sh
4,在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
5,打开终端并进入到当前文件夹【也就是放copylib.sh所在的release文件夹】,输入./copylib.sh AEightStandMaster
运行完上述指令后,同目录下会生成lib文件夹,这里我们将其称作aEightStandMaster
的库文件夹,避免与下文内容混淆
6、将AEightStandMaster
的二进制文件和 AEightStandMaster
的库文件夹里所有的文件复制到AEightStandMaster
文件夹[就是第一步新建的文件夹]中,注意:这里是把lib里的所有文件复制出来,不用复制lib文件夹
7,进入你的linux下的QT的安装目录,找到platforms文件夹,笔者的路径是
~/Qt5.7.1/5.7/gcc_64/plugins/platforms
将整个platforms文件夹复制到AEightStandMaster
文件夹中,注意:这时复制的是整个文件夹,这使得AEightStandMaster
文件夹中会多出一个platforms文件夹
8,将上文的copylib.sh放到AEightStandMaster
/platforms/中,并运行./copylib.sh libqxcb.so,这时会得到lib文件夹——libqxcb.so的库文件夹
ps:为什么是libqxcb.so呢?具体看文末的参考资料,这个跟你要运行的程序有关,需要用到哪些QT的库,就再打包对应的东西。这时,最好是通过ldd命令 ldd libqxcb.so 看下还缺啥库。因为有时候还不能完全包含进去。找到这些库。放到与libqxcb.so文件一个目录里面。
9,
在AEightStandMaster
文件夹中新建脚本AEightStandMaster
.sh,执行chmod 777 AEightStandMaster
.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 "$@"
到这里就基本完成了,将AEightStandMaster
文件夹复制到需要运行程序的目标主机即可,在目标主机中,运行程序,都采用 ./AEightStandMaster
.sh而不是./AEightStandMaster
,即运行程序的sh脚本,而不是二进制文件
上面这些文件通过SecureFXPortable.exe这个软件。走ssh协议。远程放到目标主机上。然后运行。但是。。。在实际运行的时候。我通过SecureCRTPortable.exe这个软件。走ssh命令远程连接过去。发现在执行命令程序之前。还需要在这个软件里面输入 export DISPLAY=:0.0 命令。然后执行./AEightStandMaster
.sh 才会有界面出来。
上面这些就是qt打包并通过远程命令执行起来的步骤。
我们实际在使用的时候。会做成脚本启动,那就要对/etc/rc.local这个文件。编辑下
echo "this just a test" > /home/text.log#这个是打个日志,看看是否执行了。方便调试用。
/home/pc/AEightStandMaster/AEightStandMaster.sh #这个命令就是可执行二进制文件所在的绝对路径。如果要开机自启动的话。AEightStandMaster.sh里面需要
export LD_LIBRARY_PATH
export DISPLAY=:0.0 #这句要加上。这样执行sh文件就会有界面出来的。
$dirname/$appname "$@"