流程
- 将Qt编译成Releaze程序
- 配置依赖库的复制脚本
- 配置启动文件
- 配置相关插件
- 测试
参考资料
- 参考官网官网地址
- 由于liunx版本众多,如在Ubuntu上打包的程序未必能在centos上运行,但可以在新Ubuntu目标机上执行
- Liunx中Qt程序在不安装Qt环境下能成功运行需要如下文件
组件名 | 文件名 |
---|---|
可执行的程序 | xxx.o |
可执行的脚本 | xxx.sh |
工具插件 | plugins\libpnp_basictools.so |
ExtraFilters插件 | plugins\libpnp_extrafilters.so |
Qt xcb平台插件 | platforms\libqxcb.so |
Qt Core模块 | libQt5Core.so.6 |
Qt GUI模块 | libQt5Gui.so.6 |
Qt QWidgers模块 | libQt5Widgets.so.6 |
操作流程
- 说明: 下面提到
xxx.
,是自行定义文件名。
一、 将Qt编译成Releaze程序
将Qt应用程序编译成Releaze版本,在构建项目目录中找到可执行文件xxx.o
,将可执行程序xxx.o
复制到一个新建文件夹中。
二、配置依赖库的复制脚本
- 在新建文件夹中创建一个
xxx.sh
文件,在xxx.sh
文件中填写如下代码,这是通过脚本拷贝该程序所需的库文件到当前文件夹中。
#! /bin/bash
EXE="xxx" #需要替换成你的可执行文件名
PWD="/root/service/" #替换成你当前新建文件夹得路径
files=`ldd $EXE | awk '{ if(match($3,"^/"))printf("%s "),$3 }'`
cp $files $PWD
- 在当前目录下执行命令
sudo chmod +x xxx.sh
和./xxx.sh
。这时可以看到当前目录下已经出现所需的库文件,说明拷贝库文件成功。
三 、 配置启动文件
1.在当前目录下新建与可执行程序一样的名称xxx.sh
文件,编辑内容如下代码:
#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,` #获取\和.sh之间的字符串
dirname=`dirname $0`
tmp="${dirname#?}"
#绝对路径
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@" #"$@" 脚本参数
2.执行命令sudo chmod +x xxx.sh
将该文件改为可执行文件,打包基本完成,注意:在启动应用程序时,要启动与程序同名的xxx.sh
文件。
四、配置相关插件
- 插件配置如下几种:
- 使用
qt.conf
配置 (推荐使用这个,配置比较灵活) - 在项目中使用
QApplication::addLibraryPath() or QApplication::setLibraryPaths()
来指定插件的目录。
- 使用
- 重点介绍
qt.conf
配置
- 定义
qt.conf
文件可以改变QLibraryInfo类
访问插件的路径。如果没有qt.conf
则QLibraryInfo类
按默认路径进行插件访问,这些路径在目标系统上不存在时,则无法访问。 qt.conf
文件有一个Paths组,其中包含对应于QLibraryInfo::LibraryLocation
枚举的每个值的条目。如下:
Entry | Default Value |
---|---|
Prefix | QCoreApplication::applicationDirPath() #当前文件目录路径 |
Documentation | doc |
Headers | include |
Libraries | lib |
LibraryExecutables | libexec on Unix, bin on Windows |
Binaries | bin |
Plugins | plugins |
Imports | imports |
Qml2Imports | qml |
ArchData | . |
Data | . |
Translations | translations |
Examples | examples |
Tests | tests |
Settings | . |
- 配置
qt.conf
文件例子
[Paths]
Prefix = /root/service/ #这个需要修改你当前程序对应的目录
Plugins = plugins #根据需要配置相关的文件信息
# 注意:=前面时对应的QLibraryInfo读取的标准组,=后面时我们需要修改的对应内容
- 将
qt.conf
文件中出现的配置内容文件复制到当前目录下即可。 - 配置的示意图:
五、测试
- 将配置好的项目文件夹发送到新目标机器上,进入当前目录下,修改
xxx.o和xxx.sh为可执行文件
启动./xxx.sh
测试。