一、前言
最近在做Qt windows程序在统信uos电脑(arm64)上适配的需求,经过一个多星期的努力,程序可以运行起来,到了打包发布环节,产品经理希望用户可以像windows平台那样,可以一键安装程序,并且桌面生成快捷方式。
经过不断地摸索,最后终于实现了,现在把uos平台程序打包发布的过程记录下来,供大家参考!
二、linuxdeployqt下载安装
windows系统有自动拷贝依赖的工具windeployqt,而linux系统也有个类似的工具,叫linuxdeployqt,uos系统是arm平台,也可以用linuxdeployqt工具拷贝程序依赖库。
1、下载安装linuxdeployqt
如果是linux平台的朋友,可以直接下载已经编译好的linuxdeployqt-x86_64.AppImage,我在uos本也想直接下载这个安装,但是在安装的过程中会报格式错误,所以,uos平台的,还是需要下载源码,自己编译安装。
如果是linux平台,可以只能下载编译好的应用程序文件:
https://github.com/probonopd/linuxdeployqt/releases
下载完成之后,修改一下名字:
mv linuxdeployqt-6-x86_64.AppImage linuxdeployqt
修改执行权限:
chmod 777 linuxdeployqt
再把这个可执行文件扔进/usr/local/bin目录,这样,我们就可以在其他目录访问了
mv linuxdeployqt /usr/local/bin
如果是uos系统,需要源码编译安装
源码下载:https://github.com/probonopd/linuxdeployqt
下载完成后,屏蔽版本信息:
修改源码,去掉版本检查,这个一步不做会导致打包输出错误的信息:
下载完成之后,修改文件夹下 tools/linuxdeployqt/main.cpp
屏蔽代码如下:
/*if (strverscmp (glcv, "2.28") >= 0) {
qInfo() << "ERROR: The host system is too new.";
qInfo() << "Please run on a system with a glibc version no newer than what comes with the oldest";
qInfo() << "currently still-supported mainstream distribution (Ubuntu Bionic), which is glibc 2.27.";
qInfo() << "This is so that the resulting bundle will work on most still-supported Linux distributions.";
qInfo() << "For more information, please see";
qInfo() << "https://github.com/probonopd/linuxdeployqt/issues/340";
return 1;
}*/
源码编译:
用Qt creater 打开 tools/linuxdeployqt/linuxdeployqt.pro
选择Release模式,进行编译,编译完成之后,在tools 同级目录下,会生成bin目录,bin目录里会生成可执行文件linuxdeployqt
将linuxdeployqt拷贝到/usr/local/bin:
sudo chmod linuxdeployqt
sudo -p linuxdeployqt /usr/local/bin/
测试是否安装成功
终端输入:
linuxdeployqt --version
如果显示版本信息,说明linuxdeployqt 安装成功。
三、利用linuxdeployqt拷贝依赖文件
这之前这命令之前,你要先配置qt的环境变量,
终端输入vim ~/.bashrc命令,修改 .bashrc 文件,在文件末尾追加以下内容,其中/home/zlkj/technology/5.9.7是我的Qt安装路径,大家要用自己的路径代替:
#add QT ENV
export PATH=/home/zlkj/technology/5.9.7/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/zlkj/technology/5.9.7/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/home/zlkj/technology/5.9.7/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/home/zlkj/technology/5.9.7/gcc_64/qml:$QML2_IMPORT_PATH
生效配置:
source ~/.bashrc
测试qt环境变量配置是否生效:查看qmakea版本号
qmake -v
设置成功之后:
新建文件夹,最好是你的应用程序命名
拷贝你要打包的应用程序的执行文件到该文件夹下:
然后执行命令:
linuxdeployqt XXXX -appimage
XXX: 为可执行程序名字
等待命令执行完毕,如果终端报错如下,可忽略,如果是其他问题,根据实际问题具体解决:
如果命名执行成功之后,你会看到目录下会多几个文件夹及文件,lib目录存放应用程序的依赖,然后你可以把程序依赖其他动态库也放到lib目录下。
可以通过 ldd xxx命令查看依赖的动态库
最后把应用程序依赖的其他文件拷贝到当前文件夹下
qml依赖库:放在qml文件夹下
所用到的插件:放在plugins文件夹下
然后双击应用程序,或者AppRun测试程序是否可以正常运行
自此,利用linuxdeployqt进行程序的打包发布就完成了。
四、打包成deb安装包
利用linuxdeployqt打包的程序是一个文件夹的形式,用户进入文件夹找到可执行程序或者运行脚本才可以启动程序,对于用户体验不够友好,那有没有像windows平台那样,直接双击就可以安装,并且会在桌面生成快捷方式的呢? 答案是有的,那就是uos官方提供的*.deb的形式
我们下篇详细介绍~