将ubuntu16.04的qt编译环境,发布到没有qt环境的ubuntu16.04的机器上。
有两种方式,一种是手动打包,需要将所需的库导出等。第一种是是用打包工具linuxdeployqt,本文采用第二种。
1.首先去https://github.com/probonopd/linuxdeployqt/releases下载已经编译好的版本
2.下载完成后 进入下载好的目录,将其重命名
sudo mv linuxdeployqt-continuous-x86_64.AppImage linuxdeployqt
3.将重新命名好的文件,移动到/usr/local/bin
mv ./linuxdeployqt /usr/local/bin
4.执行linuxdelpoyqt --version查看版本
root@scdz-virtual-machine:/home/scdz# linuxdeployqt --version
linuxdeployqt 4 (commit ac2d5c2), build 561 built on 2018-07-09 18:54:52 UTC
5.测试一下qmake
需要设置下环境变量
我的是
export PATH=/opt/Qt5.6.3/5.6.3/gcc_64/bin/:$PATH,其他版本根据qt安装目录自行修改
再次执行qmake
可以看到qmake正常了
至此,linuxdeployqt安装完成。
6.首先,在linux下将程序发布为release版本。并新建一个目录。以test485r为例
7.将release目录下生成的文件拷贝到test485r下
查看
在test485r目录下,运行
linuxdeployqt ./Test485 -appimage
可以看到,爆了一个错误。可能会提示其他的缺少库,但,这不是问题,本来如果是一个简单的qwidget程序,是不会报错的,但
由于我的程序需要调用sqlite,串口等,所以就会报这个错,一开始被这个错弄的焦头烂额,装了一大堆东西,一个又一个的新错误又爆了出来
最后没办法,干脆不去管了。
运行
linuxdeployqt ./Test485 -appimage -no-plugins
可以看到,编译成功。
8.将发布好的程序拷贝到没有安装Qt的测试机器上。
将test485r打包,并传到测试机器。
tar czvf tesr485r.tar test485r/
在测试机器上解压
tar -xzvf tesr485r.tar
成功后进入该目录
cd test485r
执行./Test485
结果报错了。
这个时候,需要检查依赖。ls查看目录,可以看到有plugins,进入plugins,进入platforms,ls查看,可以看到libqxcb.so
使用ldd命令查看依赖
可以看到,依赖没有问题。
退回到程序文件夹根目录
查看Test485的依赖
检查了下也没问题。全都加好库了。
这个时候,需要考虑环境变量的定向
在此设置环境变量,定向到程序目录下面
export QT_PLUGIN_PATH=/home/scdz/test485r/plugins/
export LD_LIBRARY_PATH=/home/scdz/test485r/plugins/platforms:$LD_LIBRARY_PATH
运行./Test485,成功