centos 7 qt linuxdeloyqt

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Centos 7 qt 使用linuxdeployqt 打包发布,并打包成rpm
资源
链接:https://pan.baidu.com/s/1rvF-x5CwzThT1lQQYAC7FQ
提取码:ac2j

一台Centos 7 系统下使用qt 开发一款桌面端,然后使用linuxdeployqt 打包工具进行打包。在使用rpmbuild 命令打包成rpm 包。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Centos 7 安装

使用虚拟机作为本次记录的使用对象。

  1. 创建虚拟机

新建虚拟机
等待安装完成。
打开terminal 输入命令查看系统信息

uname -a

系统信息
结果:

Linux bogon 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

二、安装qt 环境

qt 版本是15.14.2

安装目录在/opt 下
显示安装路径
进行qt 安装
安装qt
因为空间够大,所以,我选择全部安装
安装qt 组件
等待安装

安装完成以后
安装完成
在terminal 中输入一下命令,进行环境配置

gedit /etc/profile

添加(注意修改为自己的安装目录)

export PATH="/opt/Qt5.14.2/Tools/QtCreator/bin:$PATH"

export PATH="/opt/Qt5.14.2/5.14.2/gcc_64/bin:$PATH"

刷新配置命令

source /etc/profile

添加用户环境变量(username:用户名)

vim /home/username/.bashrc

添加(注意修改为自己的安装路径)

export QTDIR=/opt/Qt5.14.2/Tools/QtCreator

export PATH=$QTDIR/bin:$PATH

export MANPATH=$QTDIR/man:$MANPATH

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PATH=/opt/Qt5.14.2/5.14.2/gcc_64/bin:$PATH

刷新配置命令

source /home/username/bashrc

查看qt 版本

qmake -v

查看qmake 位置

which qmake

qmake 版本和位置
Qt 5.14.2 使用的是c++11,所以需要高版本的gcc,需要升级一下

Centos 7 自带版本
centos 7  自带的版本
升级gcc
安装centos-release-scl

yum install centos-release-scl

安装devtoolset
想安装x 版本的gcc ,直接将devtoolset-x-gcc* 改成想要的版本;此次以8为例

yum install devtoolset-8-gcc*

激活对应的devtoolset
可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本

scl enable devtoolset-8 bash

查看升级后的GCC、版本

gcc版本
显示版本

cgcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)

但是这次激活,只对本次会话管用,重新打开的话,还是之前的4.8.5版本

要找到8.3.1版本的话,有两种方式

  1. 切换版本
  2. 直接替换

切换版本
安装的devtoolset在 /opt/sh 目录下,每个版本的目录下面都有个 enable 文件,如果需要启用某个版本,只需要执行

source ./enable

例如:

source /opt/rh/devtoolset-8/enable

切换gcc 版本
直接替换
旧的GCC是运行的 /usr/bin/gcc,所以将该目录下的gcc**/**g++替换为刚安装的新版本gcc软连接,免得每次enable,执行

mv /usr/bin/gcc /usr/bin/gcc-4.8.5

ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc

或者

mv /usr/bin/g++ /usr/bin/g++-4.8.5

ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++

查看GCC/G++版本

gcc --version   /  g++ --version

gcc --version g++ --version

打开程序
打开qt 运行程序
提示error: cannot find -lGL

yum install mesa-libGL-devel

如果还是这个错,那么就
然后编项目时出现找不到GL/gl.h问题

是少装了gl库

用命令

yum install mesa-libGL-devel mesa-libGLU-devel 

(2个opengl核心库)就可以了

也可以再安装

yum install freeglut-devel 

(OpenGL Utility ToolKit )

运行qt 提供的demo运行qt 程序
此时qt 环境部署成功

参考:

https://blog.csdn.net/m0_70849943/article/details/132472950
https://blog.csdn.net/zyx4843/article/details/51569285

三、安装linuxdeployqt 环境

Linux 需要自己编译安装

  1. 下载解压
    存放到/opt 目录下
    在这里插入图片描述

解压文件 linuxdeployqt-master

tar -zxvf tar -zxvf linuxdeployqt-master.tar.gz 
  1. 修改源码,去掉版本检查

位置在

/opt/linuxdeployqt-master/tools/linuxdeployqt

在这里插入图片描述
3. 安装cmake
我安装的版本是cmake 3.5.2,如果系统默认安装了cmake ,需要卸载

yum -y remove cmake

解压文件

tar -zxvf cmake-3.5.2.tar.gz

编译

cd cmake-3.5.2
./configure

安装

make
make install

确认

/usr/local/bin/cmake --version

建立软连接

ln -s /usr/local/bin/cmake /usr/bin/

确认
重新打开terminal

/cmake --version

参考:
https://blog.csdn.net/qq_22938603/article/details/122964218

编译cmake-gui

/opt/cmake-3.5.2 目录下
执行

./bootstrap --qt-gui
make
make install

建立软连接

ln -s /usr/local/bin/cmake-gui /usr/bin/
/cmake-gui --version

  1. 安装patchelf 工具
    tar -zxvf patchelf-0.9.tar.gz
    在这里插入图片描述
    解压完成后,进入到patchelf-0.9中
    执行命令
cd patchelf-0.9
./configure

在这里插入图片描述

完成后,执行命令

make 
make install 

执行完成后,重新打开terminal 测试是否安装成功

patchelf --version

在这里插入图片描述
成功
5. 编译 linuxdeployqt
执行命令

cmake CMakeLists.txt

在这里插入图片描述

如果出现
在这里插入图片描述
说明git 的版本不对,修改源码
打开 /opt/linuxdeployqt-master 的CMakeLists.txt;把7到63行删除
最后会改成这样

在这里插入图片描述
然后删除目录下的缓存,CMakeCache.txt;然后执行

cmake CMakeLists.txt

出现
在这里插入图片描述
说明成功

  1. 配置qt 的环境依赖
    检查qmake 安装路径
    在这里插入图片描述
    使用cmake-gui来指定依赖的qt:
    执行命令
cmake-gui

在这里插入图片描述
where is the source code 选择/opt/linuxdeployqt-master

在linuxdeployqt-master 下面建立build 文件

where to build binaries 选择 /opt/linuxdeployqt-master/build
在这里插入图片描述
点击Configure,选择 “Unix Makefiles”方式;
在这里插入图片描述
之后等待
在这里插入图片描述
显示Configuring done
然后再点击 Generate 按钮
7. 生成Generate:
在这里插入图片描述
如果没成功,查看gcc g++,是否匹配
在这里插入图片描述
8. 编译make
进入到/opt/linuxdeployqt-master/build 目录下
执行

make

在这里插入图片描述
9. 安装到系统目录

cd /opt/linuxdeployqt-master/build/tools/linuxdeployqt

执行

cp linuxdeployqt /usr/local/bin

在这里插入图片描述
10 . 测试是否编译成功
在这里插入图片描述

四、 inuxdeployqt打包流程

  1. 准备打包的应用

在这里插入图片描述
2. Release 生成一个包
把应用单独拿出来,放在一个单独的文件夹中。
在这里插入图片描述
2.:引入环境变量
  qmake要引入$PATH中(注意:不指定则当前使用的是系统的qmake):
  为了不影响系统,使用脚本引入,每次打包使用之前使用source env.sh引入即可。
  
QT_DIR 要和which qmake 保持一致

#!/bin/sh
QT_DIR=/opt/Qt5.14.2/5.14.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

  1. 打包
    执行命令
source env.sh
linuxdeployqt demo -appimage

在这里插入图片描述
在这里插入图片描述论证是否真的能运行
将文件打包

tar -zcvf demo_pro.tar.gz demo_pro/

在这里插入图片描述
将文件放在另一台服务器上测试
在这里插入图片描述
在这里插入图片描述
测试可运行。

如果出现xcb 的问题,可以使用
export QT_DEBUG_PLUGINS=1 来定位

修改配置文件~/.bashrc:
vim ~/.bashrc

在最末尾添加如下语句,会在qtcreator启动时,列出详细的错误提示。
export QT_DEBUG_PLUGINS=1

保存退出编辑,使配置文件生效:
source ~/.bashrc


在这里插入图片描述

启动命令后
在这里插入图片描述
就能看到程序的运行情况了
一般xcb 的问题,

如果还是会报xcb 的错误。 报版本不对,那就需要重新安装一个qt 环境,把env.sh的路径,指到最新的路径下面
笔者关于xcb的问题,排查了好久,其实,最简单粗暴的解决办法,就是重新装一次qt 环境。然后把env.sh 的路径直接指到最新的qt 路径下。就解决了。

使用过ldd 程序,ldd xcb.so 一个个的查找依赖,经过3天的查找,能解决,但是效率太低。最好就是重装。关于xcb 的问题,直接解决。

参考:
https://hpzwl.blog.csdn.net/article/details/129409832

https://blog.csdn.net/sinat_42884063/article/details/123004755

五、rpm 打包

  1. package 环境准备
    打包命令安装
yum -y install rpm-build
yum install rpmdevtools

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 配置工作空间
rpmdev-setuptree

在这里插入图片描述
把要打包的文件复制到SOURCES 中
在这里插入图片描述
在这里插入图片描述

  1. SPEC 文件
##这些东西是rpm -qpi demo_pro*.rpm 的时候显示的数据 对打包没什么影响

Name:           demo_pro
Version:        1.3.0
Release:        1%{?dist}
# 描述信息
Summary:        "demo_pro"
# 说明软件包的协议版本,审查软件的 License 状态是打包者的职责,这可以通过检查源码或 LICENSE 文件,或与作者沟通来完成。
License:        GPL  

Source0:         %{name}.v%{version}.tar.gz
# 全局变量,最终安装的路径
%define _path /opt/demo_pro  

# 编译依赖
# BuildRequires: gettext
# Requires(post): info
# Requires(preun): info
Requires:       info

# 描述信息 
%description


# %description -l zh_CN



# %prep指定了在编译软件包之前的准备工作,这里的
# setup宏的作用是静默模式解压并切换到源码目录中,
# 当然你也可以使用tar命令来解压
%prep

#提取源码到BUILD 目录
%setup -n %{name}.v%{version}
echo "-------------------"  
echo "把 /root/rpmbuild/SOURCES/  路径下的源码文件解压提取到 /root/BUILD/目录下 "  
echo "-------------------" 

# 编译阶段,和直接编译源代码类似,具体的操作或指定的一些参数由configure文件决定。
# 编译阶段,不需要太多操作编译位于 %_builddir 构建目录下的文件。通过执行类似 ./configure && make 的命令实现。
%build

# 安装阶段
# 先删除原来的测试安装的,只有在制作失败了%{buildroot}目录才会有内容,
# 如果成功的话,目录下会被清除。 
# 从 ~/rpmbuild/BUILD 复制到 ~/rpmbuild/BUILDROOT/XXX
%install

rm -rf %{buildroot}
mkdir -p  %{buildroot}%{_path}

cp -rfv %{_builddir}/%{name}.v%{version}/* %{buildroot}%{_path}
echo "-------------------"  
echo "install start***"
echo "-------------------" 

# 需要被打包的文件和目录。决定了最后源码安装的路径
%files
#指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755  
%defattr(755, root, root)
%config(noreplace)
    %{_path}/AppRun
    %{_path}/demo_pro
    %{_path}/default.desktop
    %{_path}/default.png
    %{_path}/lib
    %{_path}/plugins
    %{_path}/readme.md
    %{_path}/translations



%post
    ##安装后执行的脚本//安装之后需要执行的动作
    if [ ! -d /usr/share/certsforsrv ] ; then
        mkdir  /usr/share/certsforsrv
    fi
    if [ ! -d /usr/share/certsforsrv/device ] ; then
        mkdir  /usr/share/certsforsrv/device
    fi



# 测试阶段
%check 


%postun 
    #卸载后
    if [ $1 -eq 0 ] ; then
        if [ -d /opt/demo_pro ]; then
             rm -rf  %{_path}/AppRun
             rm -rf  %{_path}/demo_pro
             rm -rf  %{_path}/default.desktop
             rm -rf  %{_path}/default.png
             rm -rf  %{_path}/lib
             rm -rf  %{_path}/plugins
             rm -rf  %{_path}/readme.md
             rm -rf  %{_path}/translations
        fi	
        echo "---------remove successful----------"
    fi  



%clean
rm -rf ${buildroot}
rm -rf ${builddir}/%{name}.v%{version}

%changelog

打包宏命令代表的目录
https://blog.csdn.net/get_set/article/details/53453320

rpm 打包

rpm -ba xxx.spec

rpm 安装


rpm -ivh   包名 --force --nodeps

查询已经安装的所有包

rpm -qa

查询指定的包是否已经安装

rpm -q

查看打的rpm 包中的内容

rpm -qpl certificatetool-1.3.0-4.el7.src.rpm
rpm -qpl

rpm 操作查看指南

https://www.cnblogs.com/xzongblogs/p/14617456.html

检查sepc文件语法

rpmlint rpmbuild/SPECS/mypackage.spec

参考:
https://www.aikaiyuan.com/11357.html
https://blog.csdn.net/SunshineTan/article/details/121508689

总结

以上是在centos 7 下,qt 开发,打包发布的流程,仅供参考。

  • 44
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jxy9998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值