Qt实用技巧:在CentOS上使用linuxdeployqt打包发布qt程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt实用技巧:在CentOS上使用linuxdeployqt打包发布qt程序相关的知识,希望对你有一定的参考价值。

前言

  之前在ubuntu上发布qt程序相对还好,使用脚本,在麒麟上发布的时候,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdeployqt发布qt程序。   本篇文章依然是继续发布主题,有centOS的qt项目需要发布,系统是CentOS8.2,同时也做了CentOS7.5的发布(CentOS7.5整体差上不差,就是需要先yum卸载自带的cmake,然后源码安装cmake3.4)

<br>

相关博客

  《Qt实用技巧:ubuntu发布程序打包流程(解决插件xcb加载失败) 》:在ubuntu上发布程序遇到xcb问题,当我们将其部署到另外同样环境但是未装qt的环境下,运行起来一部分是xcb文件,有一部分解决后可以正常运行启用,另一部分直接段错误,程序宕掉(提示,段核心错误,已转存什么的),使用linuxdeployqt能解决此问题,也就是使用脚本打包的升级版本。   《麒麟系统开发笔记(八):在国产麒麟系统上使用linuxdeployqt发布qt程序》:这是在麒麟上使用linuxdeployqt打包的全流程。   《Qt实用技巧:在CentOS上使用linuxdeployqt打包发布qt程序》:这是在CentOS界面服务器上linuxdeployq打包的流程。

<br>

linuxdeployqt

  Linux部署工具linuxdeployqt将应用程序作为输入,并通过将应用程序使用的资源(如库、图形和插件)复制到一个包中使其自包含。结果包可以作为AppDir或AppImage分发给用户,也可以放入交叉分发包中。它可以作为构建过程的一部分,在CMake、qmake和make等系统中部署用C、C++和其他编译语言编写的应用程序。当用于基于Qt的应用程序时,它可以绑定运行应用程序所需的Qt的特定最小子集。

源码下载地址

  gitcode下载:https://gitcode.net/mirrors/probonopd/linuxdeployqt <br>

linuxdeployqt编译(CentOS系统)

步骤一:下载解压

  

步骤二:修改源码,去掉版本检查

  找到main.cpp源码,将这一段(在192行左右)注释掉:   

cd linuxdeployqt-master
gedit tools/linuxdeployqt/main.cpp

     

步骤三:安装三方依赖库CMake

  centOS安装软件先切换至root:

su root

     CMake是自带了(注意:本篇是centOS8.2,而在centOS7.5上,因为cmake自带为cmake2.8,后续论证了,是需要卸载cmake2.8,源码装cmake3.20也编译错误,然后卸载又源码安装了cmake3.4,在centOS7.5上后续才顺利make编译linuxdeployqt)   

  使用到了cmake-gui

yum install cmake-gui.x86_64

  

  

步骤四:从源码安装patchelf工具(比其他系统多出来的)

  因为yum没有,也没有找到安装方法,只能从源码编译安装了。   

  下载地址;https://nixos.org/releases/patchelf/patchelf-0.9/patchelf-0.9.tar.gz

wget https://nixos.org/releases/patchelf/patchelf-0.9/patchelf-0.9.tar.gz

  解压:

tar xvf patchelf-0.9.tar.gz

  

  进入文件夹,配置configure:

cd patchelf-0.9
./configure

  

  编译make:   

  安装make install:      测试:   

步骤五:使用cmake配置

cmake CMakeList.txt

  

  因为安装了git与这个工程可能不对,我们直接使用源码修改大法,直接定位到代码给删掉:

gedit CMakeLists.txt

  第7行至63行删除:         直接删掉目录下的缓存文件:CMakeCache.txt,然后继续:

rm CMakeCache.txt

步骤六:配置Qt的依赖环境

  系统qt5:      而我们使用了另外安装的qt5,所以依赖需要引入我们自己安装的qt5上。   使用cmake-gui来指定依赖的qt:

cmake-gui

  选择对应的路径,然后使用默认unix makefile方式配置:      点击“Configure”,选择“Unix Makefiles”方式:      这里默认使用了系统的:   

  虽然系统的和我们安装的是一样的还是为了不出错需要配置以下:   

  再配置一次:   

步骤七:生成generate

  

步骤八:编译make

  切入build目录,并且使用make命令即可:

cd build
make

  

步骤九:安装到系统目录

  没有make install这个,手动移动到/usr/local/bin

cp linuxdeployqt /usr/local/bin/

  

步骤十:测试是否编译成功

  

<br>

linuxdeployqt打包流程

步骤一:准备打包的应用可执行程序和空目录

  新建一个工程   

  然后找个空目录:   

  copy程序:   

步骤二:引入环境变量

  qmake要引入$PATH中(注意:不指定则当前使用的是系统的qmake):   为了不影响系统,使用脚本引入,每次打包使用之前使用source env.sh引入即可。

#!/bin/sh
QT_DIR=/home/yang/Qt/5.15.2/gcc_64
export PATH=$QT_DIR/bin:$PATH
export LIB_PATH=$QT_DIR/lib:$LIB_PATH
export PLUGIN_PATH=$QT_DIR/plugins:$PLUGIN_PATH
export QML2_PATH=$QT_DIR/qml:$QML2_PATH
export LD_LIBRARY_PATH=$QT_DIR/lib:$LD_LIBRARY_PATH

echo $PATH
echo $LIB_PATH
echo $PLUGIN_PATH
echo $QML2_PATH
echo $LD_LIBRARY_PATH

  

步骤三:打包

  继续打包:

// 打包命令(用这条还是非常可能缺库,如libxcb.icccm.so.4各种系统库)
// linuxdeployqt 可执行程序 -verbose2(不要用这条了,之前ubuntu和麒麟都没出现该问题,但是centOS8.2出现了却库的问题)
// 完整打包命令(完全带进去了)
linuxdeployqt 可执行程序 -appimage

     发现已经打包成功,直接点击既可以运行了:   

步骤四:论证

  为了进一步验证,我们弄一个全新的CentOS8.2做测试,裸镜像:   

  之前的app3打包拷贝进去:   

<br>

入坑

入坑一:coro dump缺少libxcb-icccm.so.4库

问题

  为了进一步验证,我们弄一个全新的CentOS8.2做测试,裸镜像:      之前的app打包拷贝进去:   

  跑不起来:   

  

原理

  毫无疑问,应该xcb依赖的一些库没有导入进来:

export QT_DEBUG_PLUGINS=1

  

解决

  使用linuxdeployqt的时候,使用-appimage

  

Centos7下安装Qt5

下载
资源下载网址:http://download.qt.io/official_releases/qt/5.9/5.9.5/
这里我选择的是 qt-opensource-linux-x64-5.9.5.run
这里你即可以在本机上下载,然后上传到Centos上,也可以在Centos使用wget来下载。
两种方式都试了,但是在本机上有点慢,就在Centos上下载了。

wget http://download.qt.io/official_releases/qt/5.9/5.9.5/qt-opensource-linux-x64-5.9.5.run
1
安装
预安装

yum -y install mesa-libGL-devel mesa-libGLU-devel freeglut-devel
1
然后使用转到root用户下,给下载的文件赋予可执行的权限

chmod +x qt-opensource-linux-x64-5.9.5.run
1
执行文件,进行安装

./qt-opensource-linux-x64-5.9.5.run
1
界面化的安装过程,一路下来。遇见登录,可以选择跳过。

配置环境
将路径加入到 /etc/ld.so.conf中,见下图:

然后设置PATH环境变量
进入.bashrc中,vi ~/.bashrc
在PATH后加入:/opt/Qt5.9.5/5.9.5/gcc_64/bin:/opt/Qt5.9.5/Tools/QtCreator/bin

然后source ~/.bashrc。

验证
怎样确定是否安装成功呢?
输入qtcreator后,进入应用。选择示例(Examples),输入clock,

以上是关于Qt实用技巧:在CentOS上使用linuxdeployqt打包发布qt程序的主要内容,如果未能解决你的问题,请参考以下文章

Qt Creator 使用技巧

Centos7下安装Qt5

如何配置 Qt Creator 以在 centos 6.7 上使用 RH 的 devtoolset-2?

linux实用技巧:在虚拟机vmware16软件上安装CentOs8.2虚拟机,重置可用源和安装输入法

我可以在所有 MSVC >= 2013 上安全地使用哪些 SFINAE 技巧?

在CentOS环境上迁移mongodb小技巧一则