linux下将Qt程序打包成deb文件,发布、安装及使用,ubuntu和银河麒麟下可用

2023-05-16

本次测试为在ubuntu打包程序为deb文件包,然后再Ubuntu和银河麒麟下安装测试,均可使用

1、Qt下Release模式编译工程文件,文件名为wapp

在这里插入图片描述

2、创建如下基本目录结构

本目录结构在~目录下创建

wapp
    DEBIAN    // 存放control文件,用于记录安装包相关信息的配置文件  
    usr
        local
            lib          //存放程序所需的链接库
            wapp        // 存放程序文件(建议与程序同名)
        share
            applications    // 存放 *.desktop 文件
            icons            // 存放软件的图标 *.png,*.ico

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

3、 将编译好的wapp文件及需要加载的数据文件放在usr/local/wapp目录下

定位到usr/local/wapp目录下,并创建脚本文件wapp.sh

cd ~/wapp/usr/local/wapp      //具体目录改成自己创建的目录
touch wapp.sh                                   //建议不使用sudo命令

添加wapp.sh的内容

 #!/bin/sh 
appname=`basename $0 | sed s,\.sh$,,` 
dirname=`dirname $0` 
tmp="${dirname#?}" 
if [ "${dirname%$tmp}" != "/" ]; then 
dirname=$PWD/$dirname 
fi 
 
LD_LIBRARY_PATH=$dirname 
export LD_LIBRARY_PATH 
$dirname/$appname "$@"

或者

#!/bin/sh 
#pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /usr/local/shixun/wapp
#setstatus -p softmode
/usr/local/wapp/wapp

#pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /usr/local/shixun/wapp这句是用来sudo启动软件的,这里不需要,如果软件启动后没有创建和读写文件的权限可以加入,但是这样会导致银河麒麟下不能使用中文输入,所以屏蔽了,在银河麒麟下不能qt应用不能创建文件和写文件的话,就开启软模式。
保存后并输入如下命令:

sudo chmod +x wapp.sh
sudo ./wapp.sh

如果是ubuntu的则会弹出自己程序的界面,但是因为我这个银河麒麟是在arm64上面跑的,所以无法运行麒麟上的程序,只是用来打包

4、 提取并整理依赖库(建议在非中文路径下)

定位到wapp目录下,并创建脚本文件copylib.sh文件

touch copylib.sh

修改copylib.sh文件,写入如下内容:

#!/bin/sh

if [ ! -d "./dep" ]; then
  mkdir ./dep
else : then
  rm -rf ./dep
  mkdir ./dep
fi

ldd ./**wapp**|cut -d ">" -f 2|grep lib|cut -d "(" -f 1|xargs tar -chvf ./dep/**wapp**.tar
echo "ok"

标粗的地方要修改为自己的
保存后并输入如下命令:

sudo chmod +x copyllib.sh
./copylib.sh wapp

该目录下会得到一个dep文件夹

5、整理依赖库

1、将dep文件夹的子文件夹里的依赖库文件复制粘贴到wapp/usr/local/lib目录下;
2、根据自己程序需要(一般程序均会用到),在wapp/usr/local/wapp目录下创建platforms文件夹,并将Qt5.12.4/5.12.4/gcc_64/plugins/platforms/libqxcb.so(按照自己安装的Qt安装目录及版本寻找)复制到该文件夹下;
3、根据自己程序情况,将其他所用到的依赖库添加到具体目录下;

6、编写配置文件

在DEBIAN路径下创建control文件

cd ~/wapp/DEBIAN
touch control

control文件,添加如下内容

package: wapp                                     
version: 1.0.0                                   
architecture: arm64                            
maintainer: wapp                              
description: wapp Project     
 
------- 以下为注释部分,执行时,请将从这一行开始的所有内容删除  --------
package 表示安装包的名字 
version 表示次安装包的版本
architecture 当前系统的架构的信息,银河麒麟在arm64的飞腾上跑的,所以这里用的arm64,若是Ubuntu则改为amd64
maintainer 此安装包的维护者
description 此安装包的描述

7、在applications目录下创建wapp.desktop文件

cd ~/wapp/usr/share/applications
touch wapp.desktop

修改该文件并添加内容

[Desktop Entry]
Encoding=UTF-8
Name=wapp
Exec=/usr/local/wapp/wapp.sh
Icon=/usr/share/icons/logo3.ico
Comment="released_on_2022_05_16"
Terminal=false
Type=Application
Categories=Development
 
------- 以下为注释部分,执行时,请将从这一行开始的所有内容删除  --------
Exec 目标文件,编译好的程序软件(完整路径)
Icon 图标文件(完整路径)末尾不能有空格,否则将会导致无法加载图标
Categories可以取以下值,表示程序的启动快捷方式放在哪个菜单下:
			应用菜单Application;
			Network放在互联网(Internet);
			办公 Office;
			图形 Graphics;
			声音和视频 AudioVideo;
			系统工具 System;
			编程 Development;
			附件 Utility;
			影音 AudioVideo;
			游戏 Game;
			首选项 Settings(GNOME;GTK;Settings;HardwareSettings;);
			系统管理 System;Settings;

但是发现使用Exec=/usr/local/wapp/wapp.sh时,在飞腾加银河麒麟上的桌面添加不成功这个wapp.desktop,所以这里使用的Exec=/usr/local/wapp/wapp

sudo chmod +x wapp.desktop

8、将.png图片或.ico复制到icons目录下,这个图片就是qt程序的.pro文件中定义的图标

RC_ICONS = logo3.ico

在这里插入图片描述

9、最终目录结构

wapp
        DEBIAN
            control  
        usr
            local
                lib
                    libs.......
                wapp
                    platforms
                        libqxcb.so
            share
                applications    
                    wapp.desktop
                icons            
                    logo3.ico

10、打包制作安装包

在~文件夹下输入如下指令
deb包正确的命名规则program-name_version_architeture.deb。所有的值必须与它们在control文件里对应的语句相同

sudo dpkg -b wapp/ wapp_1.0.0_arm64.deb
或
sudo dpkg -b wapp/ wapp_linux_arm64.deb

dpkg -b wapp/ wapp_linux_arm64.deb这个我测试可以

若为ubuntu下打包,则将改为
sudo dpkg -b wapp/ wapp_linux_amd64.deb

一段时间便可在~目录下得到deb文件

11、安装测试

在另一台linux系统下,将deb文件拷贝到某目录下,命令定位到该目录下,并输入命令进行安装

sudo dpkg -i wapp.0.0_arm64.deb

12、运行测试

找到wapp.desktop文件,路径在/usr/share/applications/wapp.desktop
如果桌面没有wapp.desktop,则可将/usr/share/applications/wapp.desktop复制到桌面

13、 卸载测试

sudo dpkg -r wapp

14、附录

由于本项目是在ubuntu交叉编译的银河麒麟上的qt程序,用的aarch64的编译器编译的qt的源码生成的qmake,后来将这个编译好的qt的路径加入到环境变量,发现并没有生效,所以后来采用的是,将编译好的qt源码放到银河麒麟,并设置环境变量,前面文章有介绍,然后在银河麒麟安装好软件后,就可以双击运行了。

运行后发现对于数据库没有写的权限,也就是数据库写不进去,解决:终端输入:

sudo chmod -R 777 数据库文件夹路径
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux下将Qt程序打包成deb文件,发布、安装及使用,ubuntu和银河麒麟下可用 的相关文章

  • Maven安装与配置详解、多镜像节点的配置

    下载 Maven是Apache下面的一个项目 xff0c 官网下载地址 xff1a https maven apache org download cgi 历史版本下载地址 xff1a https archive apache org di
  • 使用FTPClient上传文件到ftp服务器。并解决图片损坏问题。

    1 先借鉴此博客的方法 xff08 此博客的方法上传txt文件没有问题 xff0c 但是上传的图片文件会损坏 xff09 https blog csdn net weixin 37196194 article details 5500166
  • libnet的使用详解

    最近搬砖需要对libnet进行介绍在这里对知识进行汇总 1 libnet简介 在 libnet 出现以前 xff0c 如果要构造数据包并发送到网络中 xff0c 程序员要通过一些复杂的接口来处理 libnet 的出现 xff0c 为程序员提
  • electron启动报错

    一个简单的程序启动居然报错了 xff0c 那就排查原因吧 xff0c 搜索网上的资料没有一个一样的 xff0c 大致类似的说的是electron版本和node不一致 还有说是electron的版本问题 但排查后都不是 xff0c 最后我把m
  • 手把手使用 Egg+TypeScript+mongoDB快速实现增删改查

    创建一个Egg的TS项目 xff08 Egg js官方教程 xff09 安装MogoDB Egg 依赖 span class token function npm span span class token function install
  • 小白学java——做一个歌手比赛系统(一)

    xfeff xfeff 完整代码加实验报告都在https download csdn net download qq 39980334 11232331 我已经设置成0积分下载了 xff0c 有需要的自行下载 xff0c 有问题的多看看代码
  • 使用尾插法创建链表并打印输出

    include lt stdio h gt include lt stdlib h gt include lt string h gt typedef struct LNode struct LNode next int data LNod
  • RabbitMQ 发展史与安装

    RabbitMQ 天降奇兵 解决的实例1 xff1a 统计用户的行为 xff0c 利用消息队列解耦模块和认证服务器 xff0c 认证模块被设计为 xff0c 在每一次请求页面的时候 xff0c 发送一条认证请求消息到rabbitmq xff
  • 小白学java------做一个歌手比赛系统(二)

    完整代码加实验报告都在 https download csdn net download qq 39980334 11232331 我已经设置成0积分下载了 xff0c 有需要的自行下载 xff0c 如果页面打不开可能还在审核中 xff08
  • 网络爬虫入门

    1 网络爬虫 网络爬虫 xff08 Web crawler xff09 xff0c 是一种按照一定的规则 xff0c 自动地抓取万维网信息的程序或者脚本 1 1 爬虫入门程序 1 1 1 环境准备 JDK1 8IntelliJ IDEAID
  • Java API入门篇

    文章目录 1 API1 1 API概述1 2 如何使用API帮助文档 2 String类2 1 String类概述2 2 String类的特点2 3 String类的构造方法2 4 创建字符串对象两种方式的区别2 5 字符串的比较2 5 1
  • Java异常篇

    文章目录 1 异常2 JVM默认处理异常的方式3 try catch方式处理异常4 Throwable成员方法5 编译时异常和运行时异常的区别6 throws方式处理异常7 throws和throw的区别8 自定义异常 1 异常 异常的概述
  • Java集合篇

    文章目录 1 Collection集合1 1 集合体系结构1 2 Collection集合概述和基本使用1 3 Collection集合的常用方法1 4 Collection集合的遍历1 5 集合使用步骤图解1 6 集合的案例 Collec
  • macOS下安装JDK11和配置环境变量

    1 下载 官网下载地址 华为云下载JDK11地址 tar包或者dmg xff0c 二者区别在于 xff1a tar你自己解压 xff0c 放在你想要的地方 xff08 配置JAVA HOME的时候是你自己选的位置 xff01 xff09 d
  • Java文件操作、IO流

    文章目录 1 File类1 1 File类概述和构造方法1 2 File类创建功能1 3 File类判断和获取功能1 4 File类删除功能 2 递归2 1 递归2 2 递归求阶乘2 3 递归遍历目录 3 IO流3 1 IO流概述和分类3
  • Java多线程

    文章目录 1 实现多线程1 1 进程和线程1 2 实现多线程方式一 xff1a 继承Thread类1 3 设置和获取线程名称1 4 线程优先级1 5 线程控制1 6 线程的生命周期1 7 实现多线程方式二 xff1a 实现Runnable接
  • Java编程思想(第4版)习题答案

    https span class token operator span span class token operator span span class token operator span greggordon span class
  • Bootstrap给表格设置宽度不起作用

    更改名称为table的class 将table layout属性设置为fixed span class token selector table span span class token punctuation span span cla
  • C++作用域运算符“::“的作用

    1 当存在具有相同名称的局部变量时 xff0c 要访问全局变量 include lt iostream gt using namespace std int x Global x int main int x 61 10 Local x c
  • HTML实现鼠标拖动元素排序

    1 简介 拖放 xff08 Drag和 drop xff09 是 HTML5 标准的组成部分 xff0c 为了使元素可拖动 xff0c 必须把 draggable 属性设置为 true xff0c 整个拖拽事件触发的顺序如下 xff1a d

随机推荐

  • MacOS安装svn客户端

    一 安装Homebrew环境 打开终端 输入以下命令 bin zsh c span class token string 34 span class token variable span class token variable span
  • MySql数据库root账户无法远程登陆解决办法

    最近换了新的腾讯云服务器后 xff0c 通过宝塔面板安装了mysql 数据库 xff0c 之后使用root用户通过navicat远程连接登录不了 解决办法如下 两行代码ok MySQL5 7和MySql8 开启root 用户远程访问 mys
  • MacOS修改Hosts文件

    1 苹果Mac电脑上 xff0c hosts文件的路径为 etc hosts xff0c 打开VI编辑 span class token function sudo span span class token function vim sp
  • ERD Online 4.0.0 免费私有部署方案

    文章目录 1 快速安装2 前置条件 3 一键安装 4 兼容性列表4 1 云主机兼容性列表4 2 虚拟机兼容性列表 1 快速安装 ERD Online的服务理念 xff1a 能喂到嘴里 xff0c 绝不递到手里 2 前置条件 一台至少配置为
  • mysql: error while loading shared libraries: libtinfo.so.5 解决办法

    Centos8中安装mysql8 xff0c 服务启动后 xff0c 连接服务时报错为以下错误信息 mysql error span class token keyword while span loading shared librari
  • trilead-ssh2连接不上centos服务器Caused by: java.io.IOException: Cannot negotiate, proposals do not match.

    导致此问题的原因是ssh升级后 xff0c 为了安全 xff0c 默认不在采用原来一些加密算法 xff0c 我们手工添加进去即可 1 步骤一 修改ssh的配置文件 etc ssh sshd config 搜索KexAlgorithms xf
  • macos安装nvm

    文章目录 1 概述2 安装注意事项3 安装nvm 1 概述 nvm 即 node version manager xff0c 好处是方便切换 node js 版本 2 安装注意事项 卸载从node官网下载pkg安装的nodesudo rm
  • Linux下生产者消费者问题的C语言实现

    注 xff1a 查看全文请关注作者 xff0c 或点击前往 xff1a 生产者 消费者问题的C语言实现 实验六 生产者 消费者问题实现 实验题目 要求 在Linux操作系统下用C实现经典同步问题 xff1a 生产者 消费者 xff0c 具体
  • ftpClient文件上传成功但总是返回false

    ftpClient storeFile newFileName is xff1b 文件上传成功但总是返回false flag span class token operator 61 span ftpClient span class to
  • “佛祖保佑“代码注释

    注释如下 oo0oo o8888888o 88 34 34 88 0 61 0 96 39 39 39
  • android带视频和图片的轮播(banner)解决方案

    方案只包含一个视频和多张图片 xff0c 如果又多个视频的 xff0c 可以修改适配器中的的播放器为一个list xff0c 并且在滑动中做相应的释放操作 一 xff1a 实现一个视频和多张图片的轮播banner 使用到第三方框架有 1 轮
  • Android灯光系统(硬件访问服务框架)

    Android灯光系统 硬件访问服务框架 Java类 xff1a LightsService java LightsService java通过调用 xff0c LightsService JNI来实现com android server包
  • Ubuntu16.04简易安装pycharm社区版

    1 首先到官网下载linux版本的pycharm xff0c 为了使用方便 xff0c 直接安装社区版 https www jetbrains com pycharm download section 61 linux xff08 因为虚拟
  • vue 严格格式问题

    用vue cli脚手架搭建开发环境 xff0c 会自动安装eslint严格格式 xff0c 如果代码格式不按照严格模式写 xff0c 会经常报警告 xff08 如缩进4个空格会警告 xff09 xff0c 如下图是一些警告类型 xff1a
  • vue watch深度监控一个对象下新增属性不生效问题

    先简单还原下项目中遇到的问题 xff1a adc为一个空对象 xff0c watch深度监听abc下的pageNum属性 xff08 此时还没有 xff09 data return abc watch 39 abc 39 deep true
  • python 归并排序

    归并排序 xff08 Merge Sort xff09 是一种典型的递归法排序 它把复杂的 排序过程分解成一个简单的合并子序列的过程 至于怎么得到这个子 序列 xff0c 就得自己调用自己了 归并排序首先要做的就是将数列分成左右两部分 xf
  • 面试之Spring的启动原理

    引入 为什么突然说一下Spring启动原理呢 xff0c 因为之前面试的时候 xff0c 回答的那可谓是坑坑洼洼 xff0c 前前后后 xff0c 补补贴贴 总而言之就是不行 xff0c 再次看一下源码发掘一下 在Spring Boot还没
  • Zabbix5.0钉钉告警实战

    1 服务器环境准备 xff08 Centos7 6 xff09 1 服务器1 xff1a zabbix服务端 服务器2 xff1a 客户端 2 客户端服务器上安装agent xff0c 并且安装httpd服务 xff0c 在zabbix网页
  • c++项目实战---->QT文件日志输出

    QT说明文档 xff08 输出详细日志 xff09 span class token macro property span class token directive keyword include span span class tok
  • linux下将Qt程序打包成deb文件,发布、安装及使用,ubuntu和银河麒麟下可用

    本次测试为在ubuntu打包程序为deb文件包 xff0c 然后再Ubuntu和银河麒麟下安装测试 xff0c 均可使用 1 Qt下Release模式编译工程文件 xff0c 文件名为wapp 2 创建如下基本目录结构 本目录结构在 目录下