linux下对qt编写的程序进行部署

当我们完成程序设计之后,需要将可执行程序交付客户,而运行环境里面可能是没有相关支持库的,这个时候就涉及到部署的相关问题。对于我们在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 版本就安装成功。

$ mv linuxdeployqt-x86_64.AppImage linuxdeployqt
$ mv ./linuxdeployqt /usr/local/bin
$ linuxdelpoyqt --version
linuxdeployqt 4 (commit 988d294), build 481 built on 2018-02-02 15:05:23 UTC

2.打包自己的程序

将自己的qt程序(如myQtApp)复制到一个目录(如 qtTest),运行

$ linuxdeployqt ./myQtApp -appimage

3.在ubuntu 中添加qt 应用程序图标

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

#-- 全局安装(所有用户可用),将xxx.desktop 复制到/usr/share/applications  
#-- 当前用户可用, 将xxx.desktop 复制到 ~/.local/share/applications 目录即可
#--appName.desktop
[Desktop Entry]
Version=1.0 #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

#!/bin/sh
bin=$1         #发布的程序名称

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

原文地址:https://www.cnblogs.com/jsxyhelu/p/10337738.html

时间: 2024-08-27 16:28:32

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

在Linux使用mingw32来编写win32程序

MinGW - Minimalist GNU For Windows Mingw32 是 GNU 計畫工具的集合,包含了大量的標頭檔(header files).函式庫與指 令程式.目的在提供免費的工具以生產製作可於 Winodws 上直接執行而無須依賴輔助函式 庫的原生程式(Native Windows programs). 在 Debian 系統中,您可以安裝 DebianPackages:mingw32 .DebianPackages:mingw32-binutils 與 DebianPa

MAC 平台 QT编写iphone程序,“error loading iPhoneSimulatorRemoteClientRun ended unexpectedly”

本日这么多年一直做C++开发,最近要做QT项目,被QT做界面的新特性所吸引.QSS QML的确是亮点. 还有一个就是跨平台这方面,自己玩了玩. 用的QT 的开发包是在官网上下载 qt-opensource-mac-x64-android-ios-5.2.1.dmg 在使用Qt creator写一个hellworld 最后弹出 error loading  iPhoneSimulatorRemoteClientRun ended unexpectedly. 解决办法这里面 https://bugr

linux下移植指定的二进制程序脚本

一个程序所依赖的库文件可以由:ldd  命令路径来显示 例 ldd /bin/cat  输出详解 第一行输出为库入口,非库文件 which ls|grep -v alias|grep -o'[^[:space:]]*' 脚本中调试方法 declare –i Debuglevel=1 Debuglevel={0|1} [ $Debuglevel –eq 1 ] && echo -$--. 移植脚本如下所示 #!/bin/bash # declare -i DebugLevel=0 Targe

Linux下的mysql两大实战:部署Ucenter和Ucenter-home论坛

Linux下的mysql两大实战:部署Ucenter和Ucenter-home论坛 实验目标 实战:搭建Ucenter论坛 搭建Ucenter-home网站 实验环境 LAMP环境搭建 服务端:xuegod63.cn   IP:192.168.1.63 客户端:xuegod64.cn   IP:192.168.1.64 实验步骤   ---搭建LAMP环境部署Ucenter和Ucenter-home网站,搭建一个类人人网的社交网站      实验概述 UCenter 用户中心,实现用户的统一登录

Linux下简单C语言小程序的反汇编分析

韩洋原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 写在开始,本文为因为参加MOOC相关课程而写的作业,如有疏漏,还请指出. 选了一门Linux内核分析课程,因为阅读内核代码中或多或少要涉及到At&T汇编代码的阅读,所以这里写下一个对一个简单C命令行程序的反汇编分析过程,一方面完成作业,另一方面当作练手.下面开始: 1.编写我们的C语言小程序 这里我们使用简单的例子,代码如下: 1

Windows,linux下编译qt源码(比较简单)

一.linux下静态编译qt源码 1.取到qt源码并解压到文件夹 2.cd到qt目录下 3.使用configure生成makefile ./configure–prefix /opt/qtstatic –static –release -nomake examples  --nomake demos-nomake docs -continue 4.待执行完之后执行make 5.makeinstall 参考:http://www.cnblogs.com/qianyuming/archive/201

Linux安装jdk,编写helloworld程序

今天学习了Linux安装jdk,做个笔记记录一下. 第一步,确定Linux是32位的还是64位的,然后到oracle官网上下载对应版本的jdk,一般下载.tar.gz文件.查看Linux的版本的命令是:getconf LONG_BIT.如果得到是64,那么系统就是64位的:同理,就是32位的.本人装的是64位的,所以下载的是x64.tar.gz文件. 第二步,将下载好的jdk上传到Linux系统上.在Linux中按Alt+P进入到sftp中,然后使用put命令,把jdk上传到Linux系统上,如

linux下安装qt

https://www.jianshu.com/p/7dad1a4483bd 1)安装 Qt: 第一步:到官网http://download.qt.io/archive/qt/下载 Qt 安装包,此处本人安装的是 qt-opensource-linux-x64-5.7.0.run: 第二步:打开终端,输入命令:“sudo chmod -R 777 qtopensource-linux-x64-5.7.0.run”,赋予安装包权限: 第三步:开始安装 Qt,输入命令“./qt-opensource

linux下使用mono运行vs程序和windows下的一些区别

目录: windows服务中,如果在程序中写“a.txt”:它指的并非是服务运行文件所在目录:而linux则指的是运行文件目录. 时间: windows下的ToShortDateString为“1990-01-01”格式,而linux下为“1/1/1990”格式,linux下的这种格式在向mysql数据库中的date类型字段填充时会报格式不正确的错误.