参考:
Linux(Centos)下qt的打包之通过脚本的方式打包_思宇大牙牙的博客-CSDN博客_linux qt打包
QtCreator 的版本为5.14.2,另一台电脑不需要另装qt环境。
1.利用QtCreator生成release版本,将对应生成的文件夹下的可执行文件拷贝到打包文件夹。**注意打包文件夹的名字不能有中文和空格。
这里的orangDemo2是可执行文件,但是这个文件是不能在别的电脑上运行的,因此需要把它依赖的库进行打包,我的打包文件夹的路径是/demo,把这个可执行文件拷贝到该文件夹下。
2.创建两个脚本文件,如上图所示(在路径中)
touch pack.sh
touch orangeDemo2.sh
双击先编辑pack.sh脚本,在其中输入:
#!/bin/sh
exe="orangeDemo2" #需要发布的程序名称
pwd="/demo" #创建文件夹的位置
files=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $files $pwd
该脚本主要导入可执行程序的依赖库等。
双击编辑orangeDemo2.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 "$@"
此处不需要修改,复制即用,主要作为启动脚本。
3.此时将所有打包到其他linux电脑还有一个问题,直接运行两个脚本会提示could not find the QT platform plugin “xcb“ in “。说明打包还缺东西。
添加两个重要的动态库依赖环境
- libQt5XcbQpa.so.5
- libQt5DBus.so.5
然后将两个库复制到打包文件夹demo中
找到这两个库,我的位置是/opt/Qt5.14.2/5.14.2/gcc_64/lib,输入:
cp /opt/Qt5.14.2/5.14.2/gcc_64/lib/libQt5XcbQpa.so.5.14.2 /demo
cp /opt/Qt5.14.2/5.14.2/gcc_64/lib/libQt5DBus.so.5.14.2 /demo
自己找自己的路径哦。
4.回到自己的打包路径下/demo。
添加脚本操作权限(好像也可以不添加)
chmod +x pack.sh
chmod +x orangDemo2.sh
依次运行脚本,这里就启动了
./pack.sh
./orangeDemo.sh
全部添加后是上图这样的。 其中对两个后添加的依赖库进行了改名,方便查找。
mv libQt5XcbQpa.so.5.14.2 libQt5XcbQpa.so.5就可以。
5.其他依赖库
这次打包后还是有问题,需要再打包qt插件库,默认安装在这个路径中/opt/Qt5.14.2/Tools/QtCreator/lib/Qt/plugins中的platforms和imageformats,将这两个文件夹再复制过来,最后是这样的。
icons是我的图标文件。这样就可以把这个文件夹复制到别的Linux系统上试试吧。启动时要利用脚本启动./orangeDemo.sh。
这里的SVG图标移动过去是不能显示的,不知道什么原因(换成png后可以正常显示),哪位遇到过可以指导一下!