Linux 环境打包 QT 步伐

西河刘卡车医  金牌会员 | 2024-6-19 14:01:26 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 721|帖子 721|积分 2163

目次

前言

一、安装Qt库和编译器
二、编译生成可执行文件
三、准备脚本
四、添加步伐依赖库
五、添加 Qt 相关依赖库
六、发布 deb 安装包
参考文章


前言

   Qt是一个跨平台的GUI框架,可以在多种操纵体系上运行,包括Linux、Windows和macOS。因此,将Qt步伐打包为Linux可执行文件可以确保在Linux体系上正确运行,而不受其他平台的影响。
  
  在Linux体系中,软件包管理是一个紧张的概念。通过打包Qt步伐,可以将步伐及其依赖项打包到一个文件中,方便在其他Linux体系上摆设和运行。如许可以避免用户在安装步伐时遇到缺少依赖项的问题,简化了摆设流程。
  
  打包Qt步伐使其成为一个独立的可执行文件,方便发布和分发。用户可以通过简朴地执行该文件来运行步伐,而无需进行额外的设置或配置。
  开发环境接纳:Win 10 + WSL2 + Ubuntu 20.04 + GNOME桌面版
环境配置教程可以看我的上篇文章:
Windows配置Linux环境(Win 10 + WSL2 + Ubuntu 20.04 + GNOME桌面版)

一、安装Qt库和编译器

   在Linux命令行上编译Qt步伐之前,您需要先安装Qt库和编译器。您可以通过在终端中运行以下命令来安装Qt库和编译器:
  1. sudo apt-get update
  2. sudo apt-get install build-essential qt5-default qtcreator
复制代码
  如果项目需要网络通讯模块,需要下载依赖的库:
  1. sudo apt-get install qtdeclarative5-dev qtpositioning5-dev qtwebengine5-dev libqt5webchannel5-dev qml-module-qtwebengine
复制代码
  需要串口通讯模块,下载依赖的库:
  1. sudo apt-get install libqt5serialport5 libqt5serialport5-dev
复制代码
二、编译生成可执行文件

   准备好 qt 源码项目,qt 代码目次结构如下所示,一个简朴的switch按钮项目。本教程接纳命令行对 qt 源码编译生成可执行文件。也可以通过下载 qt creator 图形化界面进行 release 版本的发布。
  

   SwitchButton.pro 如下所示:
  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2019-06-20T17:49:03
  4. #
  5. #-------------------------------------------------
  6. QT       += core gui
  7. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  8. TARGET = SwitchButton
  9. TEMPLATE = app
  10. SOURCES += main.cpp\
  11.         FrameSwitchButtons.cpp \
  12.     SwitchButton.cpp
  13. HEADERS  += FrameSwitchButtons.h \
  14.     SwitchButton.h
  15. FORMS    += FrameSwitchButtons.ui
复制代码
  Linux终端命令行使用 qmake 生成一些 makefile 文件 和 debug 和 release 文件夹。大家使用时替换自己项目的 .pro项目文件
  1. qmake SwitchButton.pro
复制代码

   使用 make 进行编译,生成可执行文件
  1. make
复制代码

   运行可执行文件,显示 qt 可视化界面
  1. ./SwitchButton
复制代码
  效果如下。至此,编译生成可执行文件已完成。
  

三、准备脚本

   准备两个脚本,我放在源码目次 script 下,可以自己选择存放脚本的目次
  



  • ldd.sh脚本
  1. #!/bin/bash
  2. LibDir=$PWD"/lib"
  3. Target=$1
  4. lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
  5. $(mkdir $LibDir)
  6. for Variable in ${lib_array[@]}
  7. do
  8.     cp "$Variable" $LibDir
  9. done
复制代码


  • SwitchButton.sh脚本
该脚本名称必须和 qt 可执行文件名同等。
  1. #!/bin/sh
  2. appname=`basename $0 | sed s,\.sh$,,`
  3. dirname=`dirname $0`
  4. tmp="${dirname#?}"
  5. if [ "${dirname%$tmp}" != "/" ]; then
  6. dirname=$PWD/$dirname
  7. fi
  8. LD_LIBRARY_PATH=$dirname
  9. export LD_LIBRARY_PATH
  10. $dirname/$appname "$@"
复制代码
  给这两个脚本加权限
  1. sudo chmod 777 ldd.sh
  2. sudo chmod 777 SwitchButton.sh
复制代码
四、添加步伐依赖库

   在源码目次下,新建一个空的文件夹 package,用于存放步伐及其动态库。也可以在其他位置新建文件夹。
  

   将编译的可执行文件复制到文件夹 package。
  1. cp ./SwitchButton ./package/
复制代码
  将ldd.sh脚本复制到编译目次,该项目为源码根目次。
  1. cp ./script/ldd.sh ./
复制代码

   执行 “./ldd.sh SwitchButton”,会在当前目次生成 lib 文件夹。其中存放着运行 SwitchButton 所依赖的库文件
  

   将 lib 文件夹中的所有文件复制到新建的文件夹 “package” 文件夹中。至此,就可以删除生成的lib文件夹和ldd.sh脚本了
  1. cp -r ./lib/* ./package/
复制代码

五、添加 Qt 相关依赖库

   通过 whereis qt5 找到 qt5 的安装目次。通常是 /usr/lib/x86_64-linux-gnu/qt5
  1. tanghao@DESKTOP-KL9JBME:/mnt/d/code/qt_pro/switchButton-master/package$ whereis qt5
  2. qt5: /usr/lib/x86_64-linux-gnu/qt5 /usr/lib/qt5 /usr/share/qt5
复制代码
  将 ldd.sh 脚本复制到 Qt5 安装目次的 platforms 文件夹中;通常是 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms
  1. sudo cp ./script/ldd.sh /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/
复制代码

   切换至 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms 目次下,执行 “sudo ./ldd.sh libqxcb.so”,生成 lib 文件夹。
  

   将生成的 lib 文件夹中的所有文件拷贝到 “package” 文件夹中。执行完该步调后就可以删除生成的 lib 文件夹和 ldd.sh 脚本了;
  1. cp ./lib/* /mnt/d/code/qt_pro/switchButton-master/package/
复制代码
  返回上一级,将 platforms 整个文件夹拷贝到 “package” 文件夹中;
  1. tanghao@DESKTOP-KL9JBME:/usr/lib/x86_64-linux-gnu/qt5/plugins$ cp -r ./platforms /mnt/d/code/qt_pro/switchButton-master/package
复制代码

   该步调为可选步调。如果所编写的步伐有操纵数据库的模块,还需要将与 platforms 同级目次中的 sqldrivers 文件夹也拷贝到 “package” 文件夹中;
  

   末了将 SwitchButton.sh 脚本拷贝到 “package” 文件夹中即可。然后将整个 “package” 文件夹压缩就可以在其他机器上解压缩后运行。
  1. cp ../script/SwitchButton.sh ./
复制代码

在其他机器上,运行 SwitchButton.sh 脚本就可以运行打包好的软件了。
六、发布 deb 安装包

   打包目次结构如下:
  1. .
  2. ├── DEBIAN
  3. │   ├── control
  4. │   ├── postinst
  5. │   └── postrm
  6. ├── etc
  7. │   └── ld.so.conf.d
  8. │       └── switchbutton-lib.conf
  9. └── usr
  10.     ├── local
  11.     │   └── SwitchButton
  12.     │       ├── SwitchButton
  13.     │       └── ...
  14.     └── share
  15.         └── applications
  16.             └── SwitchButton.desktop
复制代码
  假如我们希望最终安装的文件在 /usr/local下,那么我们就在DEBIAN同级目次下创建 /usr/local 目次,然后将我们的步伐目次放在这个文件下面即可。将前面我们生成的package目次下的依赖文件,全部移动到 usr/local/SwitchButton 目次下。
  
   在usr/share/applications目次下创建SwitchButton.desktop桌面快捷方式文件,编辑如下内容:
  1. [Desktop Entry]
  2. Type=Application
  3. Name=SwitchButton
  4. Exec=/usr/local/SwitchButton/SwitchButton
  5. Icon=/usr/local/SwitchButton/SwitchButton.png
  6. Comment=This is SwitchButton
  7. Terminal=true
复制代码
赋予权限:
  1. sudo chmod +x SwitchButton.desktop
复制代码
  创建deb包之control文件。control文件主要描述软件包的名称(Package),版本(Version),Installed-Size(巨细),Maintainer(打包人和接洽方式)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。在DEBIAN目次下创建名为control的文件,内容如下:
  1. Package: switch-button
  2. Version: 0.1.0
  3. Section: utils
  4. Priority: optional
  5. Architecture: amd64
  6. Depends:
  7. Installed-Size: 4096
  8. Maintainer: 123@163.com
  9. Description: SwitchButton-deb
  10. ------- 以下为注释部分,执行时,请将从这一行开始的所有内容删除  --------
  11. package 表示安装包的名字
  12. version 表示次安装包的版本
  13. architecture 当前系统的架构的信息
  14. maintainer 此安装包的维护者
  15. description 此安装包的描述
复制代码
  创建deb包之postinst文件。负责安装完成时的配置工作,软件安装完后,执行该Shell脚本,一样平常用来配置软件执行环境,必须以“#!/bin/sh”为首行。在DEBIAN目次下创建名为postinst的文件,内容如下。主要将SwitchButton.desktop拷贝至2个目次:Desktop目次下,自动生成桌面快捷方式;applications目次下,生成开始菜单中,other菜单下子项。
  1. #!/bin/bash
  2. cp /usr/share/applications/SwitchButton.desktop /home/${SUDO_USER}/Desktop/
  3. chmod +x /home/${SUDO_USER}/Desktop/SwitchButton.desktop
  4. sudo ldconfig -v
复制代码
  创建deb包之postrm文件。软件卸载后,执行该Shell脚本,一样平常作为清理收尾工作,必须以“#!/bin/sh”为首行。在DEBIAN目次下创建名为postrm的文件,内容如下。主要工作就是删除postinst创建的文件。
  1. #!/bin/bash
  2. filename=/home/${SUDO_USER}/Desktop/SwitchButton.desktop
  3. if [ -f ${filename} ]
  4. then
  5.     rm ${filename}
  6. fi
  7. exit 0
复制代码
   赋予权限:
  1. sudo chmod 0775 postinst
  2. sudo chmod 0775 postrm
复制代码
   在文件夹ld.so.conf.d下创建switchbutton-lib.conf,内里是安装后步伐运行时需要的库路径。安装完后,会在/etc/ld.so.conf.d 文件夹下生成该文件。
  1. /usr/local/SwitchButton
复制代码
  使用dpkg命令构建deb包。进入SwitchButtonSetup目次下,对目次下所有文件打包,生成deb包。
  1. dpkg -b . switch_button_amd64_0.1.0.deb
复制代码
  deb包的安装。安装deb包命令如下:
  1. sudo dpkg -i switch_button_amd64_0.1.0.deb
复制代码
  deb包的卸载。卸载时,使用control文件中的包名:
  1. sudo apt-get remove switch-button
复制代码
参考文章

通过命令行新建qt项目,并编译打包
如何打包我们用 Qt 写的软件 - Linux 篇
QT ubuntu打包deb包​​​​​​​

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表