当我们完成程序设计之后,需要将可执行程序交付客户,而运行环境里面可能是没有相关支持库的,这个时候就涉及到部署的相关问题。对于我们在Linux下基于QT编写的图像处理程序,我们采用linuxdeployqt 进行部署,以下是相关注意步骤。我成功的实现了GOQTTemplate在ubuntu16.04上编译,并且在ubuntu18.04上的运行:
1.linuxdeployqt 安装
最简单的方法直接下载编译好的 linuxdeployqt-x86_64.AppImage文件(https://github.com/probonopd/linuxdeployqt/releases),
将其改名字为linuxdeployqt,并chmod a+x,然后复制到 /usr/local/bin/。
命令行输入 linuxdelpoyqt –version,输出linuxdeployqt 版本就安装成功。
 
$ (commit built on UTC
 
2.打包自己的程序
 
将自己的qt程序(如myQtApp)复制到一个目录(如 qtTest),运行
 
$ linuxdeployqt ./myQtApp -appimage
 
 
3.在ubuntu 中添加qt 应用程序图标
 
修改qt 目录下的desktop 文件。可以按照ubuntu 官方提示修改。
 
. #app的版本
Name=myQtApp #app的名字
Comment= this app use for xxx #说明信息 
Exec=/path/to/your/QtApp/myQtApp #app的执行路径,绝对路径
Icon=/path/to/your/app_icon/myQtApp.png #icon 路径,绝对路径
Terminal=false #是否在终端启动,效果自己试一下就知道了
Type=Application
Categories=Utility;Application;
 
4、关于qt.conf
这个文件指定了qt 程序的运行环境。
引用qt说明的原话:
The qt.conf file can be used to override the hard-coded paths that are compiled into the Qt library. These paths are accessible using the QLibraryInfo class. Without qt.conf, the functions in QLibraryInfo return these hard-coded paths; otherwise they return the paths as specified in qt.conf.
即我们可以使用qt.conf 指定qt程序的运行路径和库路径。
The file should have a Paths group which contains the entries that correspond to each value of the QLibraryInfo::LibraryLocation enum. See the QLibraryInfo documentation for details on the meaning of the various locations.
这个文件应该要包含QLibraryInfo::LibraryLocation enum,如以下内容
Entry Default Value
Prefix 程序运行的路径,一下所有的路劲都是相对于这个路径
Libraries 程序的库库路劲,linuxdeployqt会自动再这个目录生成./lib,并将需要的库拷贝过来
… …
 
主要有这几个,多余的可以上qt帮助文档
 
# Generated by linuxdeployqt
# https://github.com/probonopd/linuxdeployqt/
[Paths]
Prefix = ./         #程序的运行路劲
Libraries =  ./lib  #程序的库路径
Plugins = ./plugins #插件路径
参考:http://doc.qt.io/qt-5/qt-conf.html
5.补充
 
虽然linuxdepoyqt可以帮我们解决多数情况下库的依赖问题,但是也有的时候不能完整解决。这个时候就需要我们自己复制所依赖的库。
提供一个脚本,复制依赖库,复制以下代码,将其保存成为 copylib.sh
 
        #发布的程序名称

desDir="./lib" #你的路径

if [ ! -d $desDir ];then
      #echo "makedir $desDir"
      mkdir $desDir
fi 
libList=$(ldd $bin | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')
cp $libList $desDir

命令行 运行
chmod a+x ./copylib.sh
./copylib.sh ./myapp
 
 
就可以复制所需要的库到当前目录下的 ./lib 文件夹中
通常情况下,结合linuxdelpoy 和 copylib.sh 可以解决Linux 下 qt 程序的库依赖问题
 
 
6.注意事项
linux下安装Qt5.7后添加qmake环境变量后出现错误
执行
qmake -v
 
出现错误:qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake’: No such file or directory
分析:
qtchooser默认选择路径中没有指向qmake路径
解决方法:
cd /usr/lib/x86_64-linux-gnu/qt-default/qtchooser
vim default.conf 
将第一行中的/usr/lib/x86_64-linux-gnu/qt4/bin/qmake
替代为qmake的路径(我的安装路径 /home/xuin/Qt5.7.0/5.7/gcc_64/bin)
 
压缩解压缩命令
 
tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成jpg.tar 
 
tar -czf jpg.tar.gz *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
 
 tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
 
tar -cZf jpg.tar.Z *.jpg   //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
 
rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
 
zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux
 
解压
 
tar -xvf file.tar //解压 tar包
 
tar -xzvf file.tar.gz //解压tar.gz
 
tar -xjvf file.tar.bz2   //解压 tar.bz2
 
tar -xZvf file.tar.Z   //解压tar.Z
 
unrar e file.rar //解压rar
 
unzip file.zip //解压zip
 

linux下对qt编写的程序进行部署的更多相关文章

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

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

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

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

  3. linux下的qt串口通信

    1.linux下的qt串口通信跟windows唯一的差别就是端口号的名字,windows下面是COM,而linux是ttyUSB0的路径 2.一般情况下linux插上USB转串口线就可以在/dev/目 ...

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

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

  5. Linux下shellcode的编写

    Linux下shellcode的编写 来源  https://xz.aliyun.com/t/2052 EdvisonV / 2018-02-14 22:00:42 / 浏览数 6638 技术文章 技 ...

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

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

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

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

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

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

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

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

随机推荐

  1. golang 多个worker正常关闭的示例

    代码如下,如有问题请联系 baibaibai_000@163.com package work_test import ( "math/rand" "runtime&qu ...

  2. DBeaver连接MySQL 8.0显示"Unable to load authentication plugin 'caching_sha2_password'."错误的问题

    下载MySQL绿色版本mysql-8.0.12-winx64,手动安装完成后.使用DBeaver连接提示"Unable to load authentication plugin 'cach ...

  3. SharePoint Server 2019新特性

    .基于.NET4.7框架 功能基本是把office365的SPO功能搬家过来.如下: Sharepoint server 2019将在2018年发布 New web parts There were ...

  4. geotrellis使用(四十二)将 Shp 文件转为 GeoJson

    前言 一个多月没有写博客了,今天尝试着动笔写点. 原因很多,最重要的原因是我转行了.是的,我离开了开发岗位,走向了开发的天敌-产品经理.虽然名义上是产品经理,但是干的事情也很杂,除了不写代码,其他的都 ...

  5. linux的基本操作(mysql 的基本操作)

    Mysql 的基本操作 在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些 ...

  6. CString中 format、trimLeft和trimright、trim 和FindOneOf用法

    1.format 可以帮助各种类型转换成CString. a. int 转 CString CString str; int number = 4; str.Format(_T("%d&qu ...

  7. Scrapy框架基本使用

    pycharm+Scrapy 距离上次使用Scrapy已经是大半年前的事情了,赶紧把西瓜皮捡回来.. 简单粗暴上爬取目标: 初始URL:http://quotes.toscrape.com/ 目标:将 ...

  8. php钩子原理和实现

    2017年3月18日17:22:52 php版本 5.6.27 5.3以下和5.3以上的版本在PHP类与对象区别很大,请注意 其实原理很简单,有些人把事情弄的过于发杂,其实就是调用某个目录下的比如/h ...

  9. C#中的double类型数据向SQL sqerver 存储与读取问题

    1.存储 由于double类型在SQLsever中并没有对应数据,试过对应float.real类型,发现小数位都存在四舍五入的现象,目前我使用的是decimal类型,用此类型时个人觉得小数位数应该比自 ...

  10. Windebug调试

    .loadby SOS clr .Symfix .reload !threads !printexception [address]