一、简介

linuxdeployqt 是Linux下的qt打包工具,可以将应用程序使用的资源(如库,图形和插件)复制到二进制运行文件所在的文件夹中。

二、安装linuxdeployqt

github直接下载编译好的 linuxdeployqt-x86_64.AppImage 应用程序文件。



下载好之后,将其改名为linuxdeployqt,并chmod +x,然后复制到 /usr/local/bin/。然后命令行输入 linuxdelpoyqt –version,查看是否安装成功,若输出版本信息表示安装成功。

$ chmod +x linuxdeployqt-x86_64.AppImage
$ mv linuxdeployqt-x86_64.AppImage linuxdeployqt
$ mv linuxdeployqt /usr/local/bin
$ linuxdelpoyqt --version
#输出的版本信息
linuxdeployqt 5 (commit 37631e5), build 631 built on 2019-01-25 22:47:58 UTC

三、配置 qt 的环境变量

终端输入vim ~/.bashrc命令,修改 .bashrc 文件,在文件末尾追加以下内容,其中/home/zlkj/technology/5.9.7是我的Qt安装路径,大家要用自己的路径代替:

#add QT ENV
export PATH=/home/zlkj/technology/5.9.7/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/zlkj/technology/5.9.7/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/home/zlkj/technology/5.9.7/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/home/zlkj/technology/5.9.7/gcc_64/qml:$QML2_IMPORT_PATH

最后要source一下使 ~/.bashrc 这个shell文件立即生效,而不必注销并重新登录。

$ source ~/.bashrc

四、打包应用程序

(1)运行Qt生成release版本的可执行文件,勾选了“shadow build”,所以示例用的是build-cleanRobot-Desktop_Qt_5_9_7_GCC_64bit-Release文件夹下的cleanRobot可执行文件;

(2)创建一个文件夹,名称最好是用可执行文件的名称,然后将cleanRobot可执行文件复制到此文件夹下;

(3)使用 linuxdeployqt 进行打包,一定要加上-appimage选项,命令如下:

$ linuxdeployqt cleanRobot -appimage

执行上面命令出现提示信息,不用管,只是创建了一个需要你自己编辑的desktop文件:

ERROR: Desktop file missing, creating a default one (you will probably want to edit it)

到这一步,就把可执行文件的动态库等依赖文件都复制到该文件夹中了。

五、编写linux桌面图标启动(可选步骤)

修改qt 目录下的desktop文件。可以按照ubuntu 官方提示修改。

ubuntu desktop文件使用

#-- 全局安装(所有用户可用),将xxx.desktop 复制到/usr/share/applications
#-- 当前用户可用, 将xxx.desktop 复制到 ~/.local/share/applications 目录即可
#--appName.desktop
[Desktop Entry]
Version=1.0 #app的版本
Name=cleanRobot #app的名字
Comment= this app use for xxx #说明信息
Exec=/path/to/your/QtApp/cleanRobot #app的执行路径,绝对路径
Icon=/path/to/your/app_icon/cleanRobot.ico #icon 路径,绝对路径
Terminal=false #是否在终端启动,效果自己试一下就知道了
Type=Application
Categories=Utility;Application;

六、编写开机脚本 runApp.sh

执行以下命令,创建runApp.sh:

$ vim runApp.sh

写入以下内容:

#!/bin/bash
export LD_LIBRARY_PATH=/app/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/app/plugins:$QT_PLUGIN_PATH
export QML2_IMPORT_PATH=/app/qml:$QML2_IMPORT_PATH
./cleanRobot

再给运行开机脚本runApp.sh添加可执行权限:

$ chmod +x runApp.sh

此时运行开机脚本,则可启动程序。其实到这一步就可以发布了,压缩成一个压缩包发布即可,可如果想继续打包成deb包,可以看下一步。

七、打包成deb包

deb是Debian Linux的软件包格式。一般来说是需要通过编译源码然后制作deb包,而这里是将前面生成的发布文件夹打包成deb包。步骤如下:

首先建立一个工作目录,比如在主文件夹下建立clean目录:

$ cd ~
$ mkdir clean
$ cd clean

因为安装软件包的时候默认是将文件释放到根目录下,所以我们这里设定安装路径为/usr/src:

$ mkdir -p usr/src #设定安装路径为/usr/src
$ cp -a ~/cleanRobot usr/src
$ mkdir DEBIAN

同时我们还需建立一个DEBIAN目录,用如下的方法在DEBIAN目录下创建一个control文件,并加入以下内容:

package: cleanRobot
Version: 1.0.1
Section: utils
Priority: optional
Architecture: i386
Depends:
Installed-Size: 512
Maintainer: fengMisaka
Description: cleanRobot-deb

然后就可以使用dpkg命令构建deb包了,生成的包在/home目录下:

$ dpkg -b . /home/cleanRobot_1.0.1_i386.deb

安装deb包命令如下:

$ sudo dpkg -i soft_1.0.1_i386.deb

就可以看到/usr/src多出了个cleanRobot目录,至此大功告成,运行开机脚本即可。

八、扩展

1、关于qt.conf

这个文件指定了qt 程序的运行环境,即我们可以使用qt.conf 指定qt程序的运行路径和库路径。内容如下所示:

# Generated by linuxdeployqt
# https://github.com/probonopd/linuxdeployqt/
[Paths]
Prefix = ./ #程序的运行路径
Libraries = ./lib #程序的库路径
Plugins = plugins #插件路径
Imports = qml
Qml2Imports = qml

**参考:**
[使用linuxdeployqt,在linux下发布qt](https://blog.csdn.net/WMX843230304WMX/article/details/78748835)

在linux下使用linuxdeployqt发布Qt程序

Linux 下qt 程序打包发布(使用linuxdelpoyqt ,shell 脚本)

Ubuntu下将现有的文件打包成deb包

在Linux下使用linuxdeployqt发布Qt程序的更多相关文章

  1. Ubuntu下使用linuxdeployqt打包Qt程序

    写了点Qt界面程序,然而发现很难移植到其他没有安装Qt环境的电脑上运行.查资料了解到,在windows上有windeployqt程序,linux上有linuxdeployqt可以帮助我们快速打包. 1 ...

  2. [置顶] Linux下发布QT程序

    Linux下发布QT程序 概述 无论在windows下还是在linux下,可执行程序的运行都依赖于相关的运行库,我们需要将依赖的库找到放到特定的位置,让可执行文件能够找到.在不知道可执行文件依赖哪些库 ...

  3. 关于在windows下部署发布QT程序的总结

    原文请看:http://www.cnblogs.com/javaexam2/archive/2011/05/18/2632916.html 关于在windows下部署发布QT程序的总结 2008-06 ...

  4. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  5. linux 下检查java jar包 程序是否正常 shell

    linux 下检查java jar包 程序是否正常 shell http://injavawetrust.iteye.com BATCH_SERVER="batch.jar" NR ...

  6. Linux下如何让jar包程序在后台一直执行

    Linux下如何让Jar包程序在后台一直执行 shell命令 nohup java -jar xxx.jar & &:让程序后台执行. nohub:让程序控制台输出转移到nohub.o ...

  7. 在Linux下,如何分析一个程序达到性能瓶颈的原因

    0.在Linux下,如何分析一个程序达到性能瓶颈的原因,请分别从CPU.内存.IO.网络的角度判断是谁导致的瓶颈?注意现在的机器CPU是多核 1.用sar -n DEV 1 10 2.用iotop命令 ...

  8. Linux下使用vim编辑C程序

    这几天在系统能力班自学linux,加上最近大数据课上开始使用linux,我在这里总结一下,linux下使用vim编辑c程序的一些问题. 大数据课上是直接使用micro来编辑的,我这里只是简单的说明一下 ...

  9. Linux下通过.desktop 文件创建桌面程序图标及文件编写方式(Desktop Entry文件概述)

    Linux下通过.desktop 文件创建桌面程序图标及文件编写方式 1.Desktop Entry文件概述:在 Windows 平台上,用户可以通过点击位于桌面或菜单上的快捷方式轻松打开目标应用程序 ...

随机推荐

  1. Spring Boot使用HandlerInterceptorAdapter和WebMvcConfigurerAdapter实现原始的登录验证

    HandlerInterceptorAdapter的介绍:http://www.cnblogs.com/EasonJim/p/7704740.html,相当于一个Filter拦截器,但是这个颗粒度更细 ...

  2. c++之函数对象、bind函数

    函数对象实质上是一个实现了operator()--括号操作符--的类. class Add { public: int operator()(int a, int b) { return a + b; ...

  3. Android双列滑动表格(双表头不动)

    ※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ...

  4. 选带傅里叶变换(zoom-fft)

    选带傅里叶变换的原理大家能够看书.大致的步骤为 移频 (将选带的中心频率移动到零频) 数字低通滤波器  (防止频率混叠) 又一次採样  (将採样的数据再次间隔採样,间隔的数据取决于分析的带宽,就是放大 ...

  5. Linux性能诊断工具

    vmstat:虚拟内存状况 –swpd   free  buff  cache   si  so   in   cs 參考:http://www.cnblogs.com/ggjucheng/archi ...

  6. STL 源代码剖析 算法 stl_algo.h -- nth_element

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie nth_element ---------------------------------- ...

  7. 亲測Mysql表结构为InnoDB类型从ibd文件恢复数据

    客户的机器系统异常关机,重新启动后mysql数据库不能正常启动,重装系统后发现数据库文件损坏,悲催的是客户数据库没有进行及时备份,仅仅能想办法从数据库文件其中恢复,查找资料,试验各种方法,确认以下步骤 ...

  8. DBscan算法及其Python实现

    DBSCAN简介: 1.简介 DBSCAN 算法是一种基于密度的空间聚类算法.该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其它空间对象)的数目不小于某一给定阀值.DBS ...

  9. android通过adb wireless的使用

    转自:http://www.cnblogs.com/Androider123/p/3848415.html?utm_source=tuicool 开发android程序,总是需要插拔插拔的,usb口都 ...

  10. STL_算法_元素计数(count、count_if)

    C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) count . count_if #include<iostream> #include<cstdio&g ...