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


    前言

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

     

    相关博客

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

     

    linuxdeployqt

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

    源码下载地址

     

    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没有,也没有找到安装方法,只能从源码编译安装了。
      在这里插入图片描述

    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/
    

      在这里插入图片描述

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

      在这里插入图片描述

     

    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打包拷贝进去:
      在这里插入图片描述

     

    入坑

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

    问题

      为了进一步验证,我们弄一个全新的CentOS8.2做测试,裸镜像:
      在这里插入图片描述
      之前的app打包拷贝进去:
      在这里插入图片描述

      跑不起来:
      在这里插入图片描述

       在这里插入图片描述

    原理

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

    export QT_DEBUG_PLUGINS=1
    

      在这里插入图片描述

    解决

      使用linuxdeployqt的时候,使用-appimage

      在这里插入图片描述

  • 相关阅读:
    flume框架原理
    NFT:Meta 将 NFT 整合到 Ins, 那么这之后又会是什么?
    传奇外网架设教程带图文解说——Gom引擎
    深度学习入门(7)误差反向传播计算方式及简单计算层的实现
    动态壁纸软件iWall mac中文特色
    【21天学习挑战赛—经典算法】LeetCode 922. 按奇偶排序数组 II
    新手学习:ArcGIS对shp文件裁剪
    Java基于JSP旅游网站系统的设计于实现
    微服务 Spring Cloud 8,开源RPC框架如何选型?
    JavaScript 函数
  • 原文地址:https://www.cnblogs.com/qq21497936/p/17235797.html