本文讲的是linux系统中的程序打包,首先我们创建一个简单的程序,我的程序叫做debtest
然后设置qmake来源,这个直接决定了程序依赖的qt库的位置,如果我们需要指定qt标准库的位置,那么qt环境就需要在那个位置。
修改前:用的默认库的位置
怎么使用我们自己指定的链接库路径呢,首先需要自己编译源码或者直接拷贝已经安装的qt环境,如下
将这个gcc_64的目录拷贝要我们指定的位置。
然后配置qt
然后删除旧的执行文件,编译生成新的,再来查看执行文件的链接库位置,发现已经被更改到我们指定的位置了。
现在开始准备打包,打包之前我们需要一个找到相关库的程序linuxdeployqt,使用方法看教程linuxdeployqt教程
然后使用linuxdeployqt debtest --appimage之后,会生成一个lib文件夹和一个plugins的文件夹,我们待会用到,
现在创建一个打包文件夹
在这个文件夹中创建一个DEBIAN的文件夹,这个文件夹中创建两个文件
control是信息配置文件,
postinst是安装时脚本执行文件,这个文件里面可以做一些root下的操作。
preinst: Debian软件包(".deb")解压前执行的脚本, 为正在被升级的包停止相关服务,直到升级或安装完成。 (成功后执行postinst 脚本)。
postinst: 主要完成软件包(".deb")安装完成后所需的配置工作. 通常, postinst脚本要求用户输入, 和/或警告用户如果接受默认值, 应该记得按要求返回重新配置这个软件。 一个软件包安装或升级完成后,postinst
脚本驱动命令, 启动或重起相应的服务。
prerm: 停止一个软件包的相关进程, 要卸载软件包的相关文件前执行。
postrm: 修改相关文件或连接, 和/或卸载软件包所创建的文件。 当前的所有配置文件都可在 /var/lib/dpkg/info 目录下找到, 与 foo 软件包相关的命名以 “foo” 开头,以 “preinst”, “postinst”, 等为扩展。这个目录下的 foo.list 文件列出了软件包安装的所有文件。Debian里用apt-get安装或卸载软件时,会常发生前处理或后处理的错误,这时只要删除对应的脚本文件,重新执行安装或卸载即可
然后在创建一个放打包文件的文件夹,这个文件夹它会对应根路径,如你命名mkdir -p uer/local/bin的话,那么程序安装后就在/usr/local/bin/下面,这边命名如下。
然后把刚刚的lib和plugins中的文件全部放进来,还有执行文件及相关联的(如图标文件),如下
为什么创建qtlib,因为这个是对应上面的库链接位置,如图这个库链接在debtest/qtlib下
现在退到执行文件目录开始打包
打包完成后,进行安装sudo dpkg -i debdir/debtest.deb
安装完成,然后到安装目录进行执行,这个时候可能会提示
qt.qpa.plugin: Could not find the Qt platform plugin “xcb” in “”
这个是因为plugins没有加载到。解决方法
解决后就可以启动程序了。