系统环境:Ubuntu18.04
Qt版本:5.9.4
工程源码:https://github.com/seer-robotics/SeerTCPTest
操作步骤:
1、用Qt的release模式编译工程文件(SeerTCPTest,即SeerTools,下文统称为SeerTools)。
可点击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,指令如下:
然后在文件夹下双击此文件,并写入如下内容:
#!/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 "$@"
2.4 修改SeerTools.sh的文件属性为可执行文件,在SeerTools.sh所在的目录下,输入如下指令:
如果提示权限不够,则在前面加上 sudo,即:sudo chmod +x SeerTools.sh,然后输入用户密码即可。
2.5 执行SeerTools.sh,在SeerTools.sh所在目录下,输入如下指令:
如果权限不够,则在前面加上 sudu 。
然后就会弹出软件的界面,如下图所示。
3、提取并整理依赖库。(建议在非中文的用户路径下)
3.1 提取依赖库。
在SeerTools目录下创建文件copylib.sh,用于提取依赖库的完整路径,并修改其属性为可执行文件,指令如下:
其内容为:
#!/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"
输入如下指令,提取软件所需的依赖库。
然后当前路径下就会多出一个dep文件夹。
3.2 整理依赖库。
解压dep文件夹中的压缩包,并按照执行copylib.sh时打印的路径,整理依赖库。
按照上图所示的路径,在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文件,指令如下:
然后在文件夹中双击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文件,并添加可执行权限,指令如下:
然后添加以下内容:
[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
如果权限不够,则在加上 sudu
一段时间后,在demo路径下就会增加一个 SeerTools_linux_amd64.deb的文件
6、安装、卸载及运行
6.1 安装。
双击SeerTools_linux_amd64.deb文件,点击安装,并输入用户密码即可。
6.2 卸载。
安装完成之后,点击安装界面上的移除,然后输入用户密码即可。
也可通过指令卸载安装的程序,如下图所示:
然后输入用户密码即可
6.3 运行。
找到SeerTools.desktop文件,文件路径为:/usr/share/applications/SeerTools.desktop
如果SeerTools.desktop没有可执行权限,给SeerTools.desktop文件增加执行权限:
然后在文件夹中双击SeerTools.desktop文件,即可运行程序,运行结果如下图所示。
尝试过用linuxdeployqt打包,但是在Ubuntu18上运行不了,尝试过解决,但是失败了。
感谢其他作者提供的参考文章。
通过脚本启动:https://blog.csdn.net/z3512498/article/details/64922180
制作桌面启动方式:https://blog.csdn.net/qq_22374265/article/details/80081932
打包:https://blog.csdn.net/yangbingzhou/article/details/33318625