在Ubuntu上打包Qt工程,并实现其安装和使用。

时间:2024-04-13 14:32:51

系统环境:Ubuntu18.04

Qt版本:5.9.4

工程源码:https://github.com/seer-robotics/SeerTCPTest

操作步骤:

1、用Qt的release模式编译工程文件(SeerTCPTest,即SeerTools,下文统称为SeerTools)。

可点击Qt界面上左侧的【项目】-->【构建设置】-->【概要】-->【构建目录】-->【浏览】找到对应的路径和文件。

我这边编译出来是共享库,不是可执行文件,如下图所示。

在Ubuntu上打包Qt工程,并实现其安装和使用。

 

2、用脚本执行编译好的文件。

2.1 创建如下所示的目录结构,在整理以来库的时候还需要做部分添加。


demo
    project
        DEBIAN    // 存放control文件,用于记录安装包相关信息的配置文件  
        usr
            local
                lib
                SeerTools        // 存放程序文件
            share
                applications    // 存放 *.desktop 文件
                icons            // 存放软件的图标 *.png

2.2 把编译好的SeerTools文件和需要的数据库文件Roboshop.db复制到SeerTools目录下。

2.3 在SeerTools目录下创建脚本文件SeerTools.sh,指令如下:

在Ubuntu上打包Qt工程,并实现其安装和使用。

然后在文件夹下双击此文件,并写入如下内容:

#!/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 "[email protected]"

2.4 修改SeerTools.sh的文件属性为可执行文件,在SeerTools.sh所在的目录下,输入如下指令:

在Ubuntu上打包Qt工程,并实现其安装和使用。

如果提示权限不够,则在前面加上 sudo,即:sudo chmod +x SeerTools.sh,然后输入用户密码即可。

2.5 执行SeerTools.sh,在SeerTools.sh所在目录下,输入如下指令:

在Ubuntu上打包Qt工程,并实现其安装和使用。

如果权限不够,则在前面加上 sudu 。

然后就会弹出软件的界面,如下图所示。

在Ubuntu上打包Qt工程,并实现其安装和使用。

 

3、提取并整理依赖库。(建议在非中文的用户路径下)

3.1 提取依赖库。

在SeerTools目录下创建文件copylib.sh,用于提取依赖库的完整路径,并修改其属性为可执行文件,指令如下:

在Ubuntu上打包Qt工程,并实现其安装和使用。

在Ubuntu上打包Qt工程,并实现其安装和使用。

其内容为:

#!/bin/sh


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


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

输入如下指令,提取软件所需的依赖库。

在Ubuntu上打包Qt工程,并实现其安装和使用。

然后当前路径下就会多出一个dep文件夹。

3.2 整理依赖库。

解压dep文件夹中的压缩包,并按照执行copylib.sh时打印的路径,整理依赖库。

在Ubuntu上打包Qt工程,并实现其安装和使用。

按照上图所示的路径,在usr路径下添加新的lib路径,并将提取的home路径下的依赖库复制到此处。

然后将提取出来的usr路径下的依赖库也复制到对应的位置。

3.3 此外,需要将Qt的libqxcb.so(文件路径为:Qt5.9.4/5.9.4/gcc_64/plugins/platforms)及其相关依赖也添加到project对应的路径下,否则系统会提示缺少“xcb”。

在SeerTools路径下添加platforms路径,并将libqxcb.so复制到此处,然后提取并整理,步骤同上。

如果在其他电脑上运行时,提示缺少“xcb",肯定是没有将libqxcb.so的依赖库整理完整,可在报错的电脑上,通过ldd查看文件的相关依赖,以及这些依赖的路径。例如:ldd libqxcb.so。然后将添加缺少的依赖库即可。

我之前遇到的情况是,按照网友的提示,添加了libQt5XcbQpa.so.5,但是提示缺少”xcb“,ldd之后才发现,还缺少libQt5DBus.so.5,补上之后就能正常运行了。

3.4 由于此工程有用到数据库,因此需要添加数据库驱动。之前由于没有添加数据库驱动,以至于界面上的数据没有完全显示。

在SeerTools路径下添加sqldirvers路径,并将路径Qt5.9.4/5.9.4/gcc_64/plugins/sqldrivers下的libqsqlite.so(因为用的是sqlite的数据库)复制到此路径下,然后提取并整理,步骤同上。

4、编写相关的配置文件。(control,*.desktop)

4.1 编写control文件

在DEBIAN路径下创建control文件,指令如下:

在Ubuntu上打包Qt工程,并实现其安装和使用。

然后在文件夹中双击control文件,并添加如下所示的内容:

package: SeerTools                                     
version: 1.0.0                                   
architecture: amd64                            
maintainer: Seer-robotics                              
description: SeerTools for Robokit NetProtocol API     


------- 以下为注释部分,执行时,请将从这一行开始的所有内容删除  --------
package 表示安装包的名字 
version 表示次安装包的版本
architecture 当前系统的架构的信息
maintainer 此安装包的维护者
description 此安装包的描述

4.2 编写SeerTools.desktop文件

在applications路径下创建SeerTools.desktop文件,并添加可执行权限,指令如下:

在Ubuntu上打包Qt工程,并实现其安装和使用。

在Ubuntu上打包Qt工程,并实现其安装和使用。

然后添加以下内容:

[Desktop Entry]

Encoding=UTF-8

Name=SeerTools   

Exec=/usr/local/SeerTools/SeerTools.sh

Icon=/usr/local/SeerTools/SeerTools.png

Comment="released_on_2019_02_25"

Terminal=false

Type=Application

------- 以下为注释部分,执行时,请将从这一行开始的所有内容删除  --------
Exec 目标文件(完整路径)
Icon 图标文件(完整路径)末尾不能有空格,否则将会导致无法加载图标

然后找一张png格式的图片文件,重命名为SeerTools.png之后复制到icons路径下。

最终的文件目录如下:

demo
    project
        DEBIAN
            control  
        usr
            lib
                libs.......
            local
                lib
                    libs.......
                SeerTools
                    platforms
                        libqxcb.so
                    dirver
                        libqsqlite.so
            share
                applications    
                    SeerTools.desktop
                icons            
                    SeerTools.png

 

5、打包(制作安装包)。

在 demo 路径下输入如下指令:

dpkg -b project/ SeerTools_linux_amd64.deb

在Ubuntu上打包Qt工程,并实现其安装和使用。

如果权限不够,则在加上 sudu

一段时间后,在demo路径下就会增加一个 SeerTools_linux_amd64.deb的文件

 

6、安装、卸载及运行

6.1 安装。

双击SeerTools_linux_amd64.deb文件,点击安装,并输入用户密码即可。

6.2 卸载。

安装完成之后,点击安装界面上的移除,然后输入用户密码即可。

也可通过指令卸载安装的程序,如下图所示:

在Ubuntu上打包Qt工程,并实现其安装和使用。

然后输入用户密码即可

在Ubuntu上打包Qt工程,并实现其安装和使用。

6.3 运行。

找到SeerTools.desktop文件,文件路径为:/usr/share/applications/SeerTools.desktop

如果SeerTools.desktop没有可执行权限,给SeerTools.desktop文件增加执行权限:

在Ubuntu上打包Qt工程,并实现其安装和使用。

然后在文件夹中双击SeerTools.desktop文件,即可运行程序,运行结果如下图所示。

在Ubuntu上打包Qt工程,并实现其安装和使用。

 

尝试过用linuxdeployqt打包,但是在Ubuntu18上运行不了,尝试过解决,但是失败了。

 

感谢其他作者提供的参考文章。

通过脚本启动:https://blog.****.net/z3512498/article/details/64922180

制作桌面启动方式:https://blog.****.net/qq_22374265/article/details/80081932

打包:https://blog.****.net/yangbingzhou/article/details/33318625