麒麟系统开发笔记(八):在国产麒麟系统上使用linuxdeployqt发布qt程序

简介: 在ubuntu上发布qt程序相对还好,使用脚本,但是在麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdeployqt发布qt程序。

前言

  在ubuntu上发布qt程序相对还好,使用脚本,但是在麒麟上发布的时候,因为银河麒麟等不同版本,使用脚本就不太兼容,同时为了实现直接点击应用可以启动应用的效果,使用linuxdeployqt发布qt程序。


补充

  在ubuntu上发布程序遇到xcb问题,当我们将其部署到另外同样环境但是未装qt的环境下,运行起来一部分是xcb文件,有一部分解决后可以正常运行启用,另一部分直接段错误,程序宕掉(提示,段核心错误,已转存什么的),使用linuxdeployqt能解决此问题,也就是使用脚本打包的升级版本。


linuxdeployqt

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

源码下载地址

  gitcode地址:https://gitcode.net/mirrors/probonopd/linuxdeployqt


linuxdeployqt编译(麒麟系统,ubuntu)

步骤一:下载解压

  

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

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

gedit tools/linuxdeployqt/main.cpp

  

  (注意:这一步不做会导致打包输出错误信息,具体看“入坑一”)

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

sudo apt-get install cmake
sudo apt-get install patchelf

步骤四:使用cmake配置

cmake CMakeList.txt

  

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

  

  直接删掉目录下的缓存文件:CMakeCache.txt,然后继续:

  

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

  麒麟系统本身自带了qt5,而我们使用了另外安装的qt5,所以依赖需要引入我们自己安装的qt5上。

  为了方便配置,也不影响系统我们装上cmake的gui版本:

sudo apt-get install cmake-gui

  

cmake-gui

  选择对应的路径,然后使用默认unix makefile方式配置:

  

  错误如下:

  

  添加环境变量路径:

  

  继续配置成功:

  

步骤六:生成generate

  

步骤七:编译make

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

make

  

步骤八:安装到系统目录

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

sudo mv linuxdeployqt /usr/local/bin/

  

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

  


linuxdeployqt打包流程

  新建一个工程

  

  然后找个空目录:

  

  开始打包:

  

  错误“QDir::exists: Empty or null file name”,需要调整打包命令:

  

  错误“qmake not fount on the PATH”,qmake要引入PATHqmake要引入PATH中:

export PATH=$PATH:/home/hdgx/Qt5.12.1/5.12.1/gcc_64/bin

  这里要将Qt引入环境,为了不影响系统,使用脚本引入,每次使用之前使用source env.sh引入即可。

#!/bin/sh
QT_DIR=/home/hdgx/Qt5.12.1/5.12.1/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

  

  

  下次打包遵循此流程即可,继续打包:

  

  发现已经打包成功(ERROR:Could not parse verbose level忽略):

  

  


入坑

入坑一:运行报错“ERROR:The host system is tool new.”

问题

  

原因

  源码中做了判断,不是源码编译问题,所以要修改源码。

解决

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

  

gedit tools/linuxdeployqt/main.cpp

  

  然后重新make:

  

相关文章
|
5天前
|
Windows
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
5天前
|
区块链
【qt】最快的开发界面效率——混合编程3
【qt】最快的开发界面效率——混合编程
16 1
|
5天前
【qt】最快的开发界面效率——混合编程2
【qt】最快的开发界面效率——混合编程
14 1
|
5天前
【qt】最快的开发界面效率——混合编程1
【qt】最快的开发界面效率——混合编程
17 0
|
5天前
|
人工智能 编译器 C++
新版Qt6快速打包程序脚本
不知道啥时候Qt更新了,目前是6.7.0,项目默认的生成路径改了, 从 项目目录的同级目录 改为了 项目目录中的build目录, 之前的脚本也用不了了,所以用AI更新了一下脚本, 希望能帮到大家,方便快速打包程序到桌面。
43 9
|
5天前
|
开发框架 编译器 C++
Qt:一个强大的跨平台C++应用程序开发框架
Qt:一个强大的跨平台C++应用程序开发框架
37 1
|
5天前
|
开发框架 Linux C++
Qt:强大的跨平台C++应用程序开发框架
Qt:强大的跨平台C++应用程序开发框架
48 3
|
5天前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
30 0
|
5天前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
49 8
C++ Qt开发:QTcpSocket网络通信组件
|
5天前
|
开发框架 数据可视化 编译器
Qt的魅力:探索跨平台图形界面开发之旅
Qt的魅力:探索跨平台图形界面开发之旅
33 1

推荐镜像

更多