linuxdeployqt打包总结

linuxdeployqt打包的具体内容:
  • https://blog.csdn.net/zyhse/article/details/106381937?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165725089416781818737167%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165725089416781818737167&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-106381937-null-null.142^v32^pc_search_result_control_group,185^v2^control&utm_term=linuxdeployqt%E6%89%93%E5%8C%85&spm=1018.2226.3001.4187。作者写的很详细,感谢

  需要注意的是最后打deb包时,自己建的那3个文件,别加后缀名!别加后缀名!别加后缀名!,就按作者的单一个名字就行,否则会报错。

  还有作者写的可能不符合我的情况的,打deb包中的脚本文件中 ~/Desktop,这个应该要当前用户的桌面路径,但~在软件安装时表示/root这个路径,导致执行一直报/root/Desktop不是一个目录。将这个改成通用的,问一个大神给的代码:  

  

  theuser=$(users | awk '{print $1;}')

  if [ ! -d "/home/$theuser/桌面" ]; then
    des="/home/$theuser/Desktop"
  else
    des="/home/$theuser/桌面"
  fi

  echo "创建桌面快捷方式"
  cp /usr/share/applications/幻影图像1.0.desktop "$des"

借鉴这个就行。能看的出来$(users | awk '{print $1;}')这个就是用户桌面地址了,不过上面代码更好,应对各种情况。

 

 

  • https://blog.csdn.net/weixin_35045900/article/details/116803229

  上面这个链接是配置linuxdeployqt时,作者把遇到的问题和解决方法都列出来了,再次感谢。

 

 

 

   下面是备份的打包博文,格式不好,全当备注了,怕丢

 

 

首先,来说下,本教程实现的功能:
在linux下对开发的Qt应用,进行拷贝依赖文件so等,并打成deb安装包;实现可安装、卸载,安装完毕自动在开始菜单下和桌面添加快捷方式;卸载后自动删除快捷方式,以及删除应用生成的log文件。测试环境:ubuntu 16.04
一、使用linuxdeployqt拷贝依赖文件win系统下有个自动拷贝依赖文件的工具windeployqt,而linux系统下也有个类似的工具,叫linuxdeployqt,原理一个意思。
该工具的帮助文档:https://github.com/probonopd/linuxdeployqt/blob/master/README.md
有兴趣,可以自己看看。
1. 下载linuxdeployqtlinuxdeployqt-x86_64.AppImage,下载地址:
https://github.com/probonopd/linuxdeployqt/releases


2. 安装linuxdeployqt为了我们后面使用时,方便一点,我们把这长长的名字改短点吧:
mv linuxdeployqt-6-x86_64.AppImage linuxdeployqt1然后修改为可执行权限
chmod 777 linuxdeployqt1再把这个可执行文件扔进/usr/local/bin目录,这样,我们就可以在其他目录访问了
mv linuxdeployqt /usr/local/bin1测试是否安装成功
linuxdeployqt --version1输出版本信息,表示安装成功。

3. Qt库路径设置到环境变量工具会根据生成的可执行文件,自动搜索依赖,故我们需要确保Qt库的相关路径设置到环境变量中,这样工具在搜索时才能找到,并拷贝它们。
另外拷贝文件,对环境变量的使用,不想要重启系统那么麻烦,所以我们修改.bashrc文件,仅对当前用户永久有效。
vim ~/.bashrc1在.bashrc文件末尾,追加内容如下:
#add qt envexport PATH=/opt/Qt5.13.0/5.13.0/gcc_64/bin:$PATHexport LIB_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/lib:$LIB_PATHexport PLUGIN_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/plugins:$PLUGIN_PATHexport QML2_PATH=/opt/Qt5.13.0/5.13.0/gcc_64/qml:$QML2_PATH12345其中,/opt/Qt5.13.0/5.13.0/gcc_64是本次测试环境Qt安装目录,大家根据自己的情况替换。
然后,使用source命令让文件立即生效。
source ~/.bashrc1然后,对环境变量测试下,是否设置正确。如下:
qmake -v1

看到qmake的版本号,则表示设置成功。
提示:
根据linuxdeployqt在线帮助文档介绍,其实上述最重要的环境变量就是PATH这条,其他的并没有说,或许其他不要也没啥问题。
4. 拷贝依赖文件拷贝前,确认生成的是Release版本的程序,这个是常识。
我们在根目录下建立TestSetup目录,用于放置打包相关的文件;
并在TestSetup下继续建个Test目录,用来装Test应用及拷贝文件。
mkdir TestSetupcd TestSetupmkdir Test123把我们的应用Test拷贝到Test目录下


使用命令执行依赖文件拷贝
linuxdeployqt Test -appimage1终端报错,如下:


不用管它,是关于桌面文件的,后面我们直接编辑它。
一会后,/TestSetup/Test目录下,已经把依赖全部拷贝好了。


我们可以看到创建了lib等目录。
需要说明的是,在执行“linuxdeployqt Test -appimage”命令时,其实除了拷贝依赖文件外,还对目标文件Test进行了修改,在Test中插入了一些库路径信息。
经过本人对前后2个文件内容的对比测试,至少是添加了lib目录的,其他没试过。
所以,你只需要把程序依赖的so文件放入lib目录下,无论是显式、隐式加载的so,都是可以搜索到的。
若你的应用中还有其他,如配置文件等资源,那么手动拷贝到你自己代码指定的目录下。
重要提示:
因为linuxdeployqt将在内部使用ldd命令,来确定从何处将库复制到包中。ldd命令本身只能查找隐式加载的so,故若程序中代码使用显式加载的so,它是找不到的,这时需要开发者自己去保证显式加载so的路径可被搜索。举个例子:若存在程序A显式加载B.so,B.so隐式加载C.so,则对程序A使用linuxdeployqt拷贝依赖时,程序A的间接依赖文件C.so,将不会被拷贝。当程序跑起来加载B.so时,就会报找不到C.so的错误。这一点尤其需要注意。此时我们需要再对B.so使用一次linuxdeployqt拷贝依赖。这样程序A加载B.so,B.so加载C.so,就都可以找到了。5. 配置共享库搜索路径(可选)如果你的应用中,调用了其他的库,又想要放在某个指定目录下,那么可以在应用同目录下,添加qt.conf文件,指定库搜索路径。这块知识,就自行百度吧,反正最终目的,能正常启动应用就行。
6. 测试应用能否正常运行此时,一个完整的运行环境已经具备了,我们测试一下。
重新开一个终端,在该终端的环境变量中去掉Qt库相关的路径,修改后的环境变量只对该终端生效,然后我们执行应用,看能否运行。
操作过程:先用export查看有哪些环境变量设置了Qt路径。
export1

如果本教程之前没有配置过qt环境变量,那么结果应该和.bashrc文件我们追加的内容一致的。
然后把这些环境变量中Qt路径去掉:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binexport LIB_PATH=export PLUGIN_PATH=export QML2_PATH=1234测试启动应用
./Test1此时如果不出意外,应该可以正常启动。
如果有意外,那就根据实际情况,先把问题解决,再继续。
二、打成deb包1. deb包安装路径原理简述下面举个例子进行说明,我们先来看打包目录与安装后目录结构对比。
打包目录,DEBIAN下面为deb包控制文件,应用与依赖文件位于source/opt/Test/,如下:
source├── DEBIAN│   └── control│   └── postinst│   └── postrm├── opt    └── Test        ├── Test        └── xxx123456789若按照此打包目录生成deb,安装后,其目录如下:
/├── opt    └── Test        ├── Test        └── xxx12345小结:
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=ApplicationName=My Test                    #应用的名字(快捷方式显示的文字)Exec=/opt/Test/Test             #应用的执行路径(绝对路径)Icon=/opt/Test/Test.png         #应用的图标(绝对路径)Comment=This is my test         #说明信息Terminal=true                   #是否允许在终端启动1234567我们按照上述内容进行编辑,其中图标,自己随便去下载一个.png放到/TestSetup/source/opt/Test/Test.png即可。
注意:
Test.desktop文件需要有执行权限,该文件才能变成图标,否则只是显示一个普通文件。
Test.desktop中的路径需要填写deb包的安装路径,非打包路径。
Terminal=true时,启动程序时,会附带启动终端界面,即会出现2个界面。
Terminal=false时,启动程序时,没有终端界面,仅显示程序这一个界面。
4. 创建deb包之control文件control文件主要描述软件包的名称(Package),版本(Version),Installed-Size(大小),Maintainer(打包人和联系方式)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。
我们在DEBIAN目录下创建名为control的文件,内容如下:
Package: mytestVersion: 0.1.0Section: utilsPriority: optionalArchitecture: amd64Depends:Installed-Size: 512Maintainer: 123@163.comDescription: my test package123456789含义:
Package:包名。记住,后面卸载时候需要包名。
Version:应用版本。
Architecture:架构,我这里是amd64。
Maintainer:维护人员联系方式,看着办。
Description:软件包描述。
其他的,这里没用到,就不写了,自己百度吧。
5. 创建deb包之postinst文件负责安装完成时的配置工作,软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行。
我们在DEBIAN目录下创建名为postinst的文件,内容如下:
#!/bin/shchmod 777 /opt/Test/Test.desktopcp /opt/Test/Test.desktop /usr/share/applications/cp /opt/Test/Test.desktop ~/Desktop/1234主要将Test.desktop拷贝至2个目录,Desktop目录下,自动生成桌面快捷方式。
applications目录下,生成开始菜单中,other菜单下子项。
最终效果,查看文章末尾处效果图。
6. 创建deb包之postrm文件软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行。
我们在DEBIAN目录下创建名为postrm的文件,内容如下:
#!/bin/shrm /usr/share/applications/Test.desktoprm ~/Desktop/Test.desktop123主要工作就是删除postinst创建的2个文件。
7. 使用dpkg命令构建deb包对source目录下所有文件打包,在output目录下生成deb包。
cd /TestSetup/sourcedpkg -b . /TestSetup/output/test_amd64_0.1.0.deb12打包结果:


三、deb包的安装与卸载1. 安装安装deb包命令如下:
cd /TestSetup/outputsudo dpkg -i test_amd64_0.1.0.deb12安装完成,桌面效果:


开始菜单效果:


安装路径效果:


2. 卸载卸载时,使用control文件中的包名。
sudo apt-get remove mytest1卸载之后,安装路径下文件全部删除,自动删除桌面快捷方式和菜单项。
若应用生成一些log文件,因不在打包文件中,故不会自动删除,
则需要在postrm文件中添加删除命令。
posted @ 2022-08-12 10:28  卡萨丁·周  阅读(549)  评论(0编辑  收藏  举报