当我们完成程序设计之后,需要将可执行程序交付客户,而运行环境里面可能是没有相关支持库的,这个时候就涉及到部署的相关问题。对于我们在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
标签:qt,tar,路径,jpg,linuxdeployqt,file,linux,编写 From: https://blog.51cto.com/jsxyhelu2017/5968102