一、Linux下打包发布步骤如下
- 编译应用程序环境:ubuntu18.04版本
- 开发环境:Qt5.14.2
- 编译环境:gcc_64
- 要移植的电脑:ubuntu18.04版本,没有开发环境
第一步:打包依赖库
1、创建一个打包目录,把生成的可执行文件拷贝放在创建的打包目录下,这里我是创建了一个打包目录名称为:pack
创建目录命令:mkdir pack
cxx@cxx-virtual-machine:~/demo$ mkdir pack
2、在打包目录下新建一个脚本pack.sh
内容如下:
#!/usr/bin/sh
exe="test" #程序名称
des="/home/cxx/demo/pack" #打包文件夹位置
deplist=$(ldd $exe | awk '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $deplist $des
注意:根据你自己打包的程序名称和打包文件夹位置来修改
3、在脚本文件所在的文件目录下,命令行执行脚本:sh pack.sh
cxx@cxx-virtual-machine:~/demo/pack$ sh pack.sh
进入 打包文件夹下,会发现很多库,这些就是要依赖的库
4、接着进入Qt安装位置下编译环境的plugins目录下,这里我的Qt安装的目录是在/opt/Qt5.14.2/目录下,把plugins目录下的platforms目录复制到要打包的目录下
执行命令:cp -r platforms/ /home/cxx/demo/pack
注意:/home/cxx/demo/pack要根据自己创建的打包文件夹所在位置修改
注意:这是一个目录,不要把目录里面的文件拷贝出来,放进刚刚打包好的库一起
5、在qt安装编译环境目录的lib目录下,拷贝libQt5XcbQpa.so.5.14.2和libQt5DBus.so.5.14.2到打包发布目录下
6、检查platforms目录下是否有libqxcb.so库,如果没有,则需去qt安装目录下plugins目录下的platforms目录拷贝
第二步:移植到其他电脑,并做好相关配置
1、将打包文件夹压缩,然后拷贝到要移植的电脑上,进行解压:tar -xvf pack.tar.xz
2、进入到解压目录,在命令行执行,发现抱错,提示不到依赖库,
可是认真看一下,我们不是打包过来了吗?这些缺少的库,为什么还报错呢?
因为在程序运行时,它默认寻找的库是在系统lib目录下,并不在发布的文件夹下,报错信息中就可以知道
3、修改库依赖路径,在命令行输入
export LD_LIBRARY_PATH='你的库路径':$LD_LIBRARY_PATH
export LD_LIBRARY_PATH='/home/cxx/tmp/pack':$LD_LIBRARY_PATH
4、再次运行,还是报错
报错信息不是很明确,但是根据提示肯定是少插件了,具体不知道是什么
在命令下执行:export QT_DEBUG_PLUGINS=1
这个命令可以帮我们输出程序运行时,加载插件时的调试信息
执行命令后,再次执行,发现提示,少了libQt5XcbQpa.so.5的库,但是我们把Qt那边的库打包了libQt5XcbQpa.so.5.14.2的库,但是他要的是.so.5后缀的库,怎么办呢?
5、执行ldd libqxcb.so,发现找不到libQt5XcbQpa.so.5.14.2和libQt5XcbQpa.so.5
但是qt打包时我们有拿过来了,只是名字不同,我们进行软链接即可
执行命令:ln -s libQt5DBus.so.5.14.2 libQt5DBus.so.5
命令行执行:ln -s libQt5XcbQpa.so.5.14.2 libQt5XcbQpa.so.5
然后再次执行,发现可以运行啦