首先,来说下,本教程实现的功能:

测试环境:ubuntu16.04

一、使用linuxdeployqt拷贝依赖文件

win系统下有个手动拷贝依赖文件的工具windeployqt,而linux系统下也有个类似的工具,叫linuxdeployqt,原理一个意思。

该工具的帮助文档:/probonopd/l…

有兴趣,可以自己瞧瞧。

1.下载linuxdeployqt

linuxdeployqt-x86_64.AppImage,下载地址:

/probonopd/l…

2.安装linuxdeployqt

为了我们前面使用时,便捷一点,我们把这长长的名子改短点吧:

mv linuxdeployqt-6-x86_64.AppImage linuxdeployqt

之后更改为可执行权限

chmod 777 linuxdeployqt

再把这个可执行文件推入/usr/local/bin目录,这样,我们就可以在其他目录访问了

mv linuxdeployqt /usr/local/bin

测试是否安装成功

linuxdeployqt --version

输出版本信息,表示安装成功。

3.Qt库路径设置到环境变量

工具会依据生成的可执行文件,手动搜索依赖,故我们须要确保Qt库的相关路径设置到环境变量中,这样工具在搜索时能够找到,并拷贝它们。

另外拷贝文件,对环境变量的使用,不想要重启系统这么麻烦,所以我们更改.bashrc文件,仅对当前用户永久有效。

vim ~/.bashrc

在.bashrc文件末尾,追加内容如下:

#add qt env
export PATH=/opt/Qt5.13.0/5.13.0/gcc_64/bin:$PATH
export LIB_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/lib:$LIB_PATH
export PLUGIN_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/plugins:$PLUGIN_PATH
export QML2_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/qml:$QML2_PATH

其中linux系统,/opt/Qt5.13.0/5.13.0/gcc_64是本次测试环境Qt安装目录,你们按照自己的情况替换。

之后,使用source命令让文件立刻生效。

source ~/.bashrc

之后,对环境变量测试下,是否设置正确。如下:

qmake -v

见到qmake的版本号,则表示设置成功。

提示:

按照linuxdeployqt在线帮助文档介绍,虽然上述最重要的环境变量就是PATH这条,其他的并没有说,其实其他不要也没啥问题。

4.拷贝依赖文件

拷贝前,确认生成的是Release版本的程序,这个是常识。

我们在根目录下构建TestSetup目录,用于放置打包相关的文件;

并在TestSetup下继续建个Test目录,拿来装Test应用及拷贝文件。

mkdir TestSetup
cd TestSetup
mkdir Test

把我们的应用Test拷贝到Test目录下

linuxdeployqt Test -appimage

终端报错,如下:

在这里插入图片描述

不用管它,是关于桌面文件的,前面我们直接编辑它。

一会后,/TestSetup/Test目录下,早已把依赖全部拷贝好了。

在这里插入图片描述

我们可以看见创建了lib等目录。

须要说明的是,在执行“linuxdeployqtTest-appimage”命令时,虽然不仅拷贝依赖文件外,还对目标文件Test进行了更改,在Test中插入了一些库路径信息。

经过本人对前后2个文件内容的对比测试,起码是添加了lib目录的arm linux,其他没试过。

所以,你只须要把程序依赖的so文件装入lib目录下,无论是显式、隐式加载的so,都是可以搜索到的。

若你的应用中还有其他,如配置文件等资源,这么自动拷贝到你自己代码指定的目录下。

重要提示:

5.配置共享库搜索路径(可选)

假如你的应用中,调用了其他的库,又想要置于某个指定目录下,这么可以在应用同目录下,添加qt.conf文件,指定库搜索路径。这块知识,就自行百度吧,总之最终目的,能正常启动应用就行。

6.测试应用能够正常运行

此时,一个完整的运行环境已然具备了,我们测试一下。

重新开一个终端,在该终端的环境变量中去除Qt库相关的路径,更改后的环境变量只对该终端生效,之后我们执行应用,看能够运行。

操作过程:先用export查看有什么环境变量设置了Qt路径。

export

假如本教程之前没有配置过qt环境变量,这么结果应当和.bashrc文件我们追加的内容一致的。

之后把这种环境变量中Qt路径去除:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
export LIB_PATH=
export PLUGIN_PATH=
export QML2_PATH=

测试启动应用

./Test

此时若果不出意外,应当可以正常启动。

假如有意外,那就按照实际情况,先把问题解决,再继续。

二、打成deb包1.deb包安装路径原理阐述

下边举个反例进行说明,我们先来看打包目录与安装后目录结构对比。

打包目录,DEBIAN下边为deb包控制文件,应用与依赖文件坐落source/opt/Test/,如下:

source
├── DEBIAN
│   └── control
│   └── postinst
│   └── postrm
├── opt
    └── Test
        ├── Test
        └── xxx

linux qt 安装_ ubuntu 16.04 deb包打包 _linuxdeployqt 教程

若根据此打包目录生成deb,安装后,其目录如下:

/
├── opt
    └── Test
        ├── Test
        └── xxx

小结:

DEBIAN目录下主要储存一些控制文件和脚本,具体前面使用到时,再细说。

DEBIAN目录固定放置于打包目录顶楼。

deb包安装时,默认将内部文件,释放至根目录下(/),故我们须要在打包时,将安装目录层次创建好,以达到想要的安装路径疗效。

2.规划安装路径

我们希望将Test应用安装到/opt/Test/下,下边开始创建目录层次。

在/TestSetup/下创建output目录,用于储存生成的deb包;

创建source目录,用于储存打包文件,如下:

在这里插入图片描述

在source目录下,创建DEBIAN目录、创建安装路径层次opt目录以及opt/Test目录,如下:

在这里插入图片描述

之后将上面我们拷贝的依赖文件,全部联通到/TestSetup/source/opt/Test/目录下,如下:

3.配置*.desktop桌面快捷方法文件

还记得后面,拷贝依赖文件晨报错吗,就是这个桌面文件。

直接把它扔到桌面文件夹(~/Desktop/),它就可以弄成一个带图标的快捷方法,类似win。

我们把坐落/TestSetup/source/opt/Test/default.desktop改为Test.desktop;

它有如下内容,须要编辑:

[Desktop Entry]
Type=Application
Name=My Test                    #应用的名字(快捷方式显示的文字)
Exec=/opt/Test/Test             #应用的执行路径(绝对路径)
Icon=/opt/Test/Test.png         #应用的图标(绝对路径)
Comment=This is my test         #说明信息
Terminal=true                   #是否允许在终端启动

我们根据上述内容进行编辑,其中图标,自己随意去下载一个.png放在/TestSetup/source/opt/Test/Test.png即可。

注意:

Test.desktop文件须要有执行权限,该文件能够弄成图标,否则只是显示一个普通文件。

linuxdeployqt 教程 _linux qt 安装_ ubuntu 16.04 deb包打包

Test.desktop中的路径须要填写deb包的安装路径,非打包路径。

Terminal=true时,启动程序时,会附送启动终端界面,即会出现2个界面。

Terminal=false时,启动程序时,没有终端界面,仅显示程序这一个界面。

4.创建deb包之control文件

control文件主要描述软件包的名称(Package),版本(Version),Installed-Size(大小),Maintainer(打包人和联系方法)以及描述(Description)等,是deb包必须具备的描述性文件,以易于软件的安装管理和索引。

我们在DEBIAN目录下创建名为control的文件,内容如下:

Package: mytest
Version: 0.1.0
Section: utils
Priority: optional
Architecture: amd64
Depends:
Installed-Size: 512
Maintainer: 123@163.com
Description: my test package

含意:

Package:包名。记住,前面卸载时侯须要包名。

Version:应用版本。

Architecture:构架,我这儿是amd64。

Maintainer:维护人员联系方法,看着办。

Description:软件包描述。

其他的,这儿没用到,就不写了,自己百度吧。

5.创建deb包之postinst文件

负责安装完成时的配置工作,软件安装完后,执行该Shell脚本,通常拿来配置软件执行环境,必须以“#!/bin/sh”为首行。

我们在DEBIAN目录下创建名为postinst的文件,内容如下:

#!/bin/sh
chmod 777 /opt/Test/Test.desktop
cp /opt/Test/Test.desktop /usr/share/applications/
cp /opt/Test/Test.desktop ~/Desktop/

主要将Test.desktop拷贝至2个目录,Desktop目录下linux qt 安装,手动生成桌面快捷方法。

applications目录下,生成开始菜单中,other菜单下子项。

最终疗效,查看文章末尾处疗效图。

6.创建deb包之postrm文件

软件卸载后,执行该Shell脚本,通常作为清除扫尾工作,必须以“#!/bin/sh”为首行。

我们在DEBIAN目录下创建名为postrm的文件,内容如下:

#!/bin/sh
rm /usr/share/applications/Test.desktop
rm ~/Desktop/Test.desktop

主要工作就是删掉postinst创建的2个文件。

7.使用dpkg命令建立deb包

对source目录下所有文件打包,在output目录下生成deb包。

cd /TestSetup/source
dpkg -b . /TestSetup/output/test_amd64_0.1.0.deb

打包结果:

在这里插入图片描述

三、deb包的安装与卸载1.安装

安装deb包命令如下:

cd /TestSetup/output
sudo dpkg -i test_amd64_0.1.0.deb

安装完成,桌面疗效:

在这里插入图片描述

开始菜单疗效:

在这里插入图片描述

安装路径疗效:

在这里插入图片描述

2.卸载

卸载时linux qt 安装,使用control文件中的包名。

sudo apt-get remove mytest

卸载以后,安装路径下文件全部删掉,手动删掉桌面快捷方法和菜单项。

若应用生成一些log文件,因不在打包文件中,故不会手动删掉,

则须要在postrm文件中添加删掉命令。

参考链接:

《Ubuntu下的deb打包、安装与卸载》

《Ubuntu中deb包解读及打包教程》

Linux下通过.desktop文件创建桌面程序图标(快捷方法)及文件编撰》

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复