Linux环境下Qt应用程序打包与发布

本文介绍Linux环境下Qt应用程序的打包与发布。

Linux环境下,在开发机器上开发完应用程序,需要部署到其他非开发环境的机器上,这时,需要对开发的Qt应用程序进行打包,以确保可以在其他机器平台(非开发环境)上能正常使用。

1.创建目录

为方便各文件的有效组织,需对不同的文件进行归类,这里以“fixture”项目为例。建立“fixture”文件夹(可根据实际项目进行命名),在此文件夹下依次建立"bin","lib","plugins"文件夹,以备用。如下图所示。

Linux环境下Qt应用程序打包与发布_第1张图片

2.lib文件夹

lib文件夹主要放置应用程序依赖的一些库。这里建立"copylib.sh"一个脚本。内容如下:

#!/bin/bash

LibDir=$PWD"/lib"
Target=$1

lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))

$(mkdir $LibDir)

for Variable in ${lib_array[@]}
do
    cp "$Variable" $LibDir
done

赋予"copylig.sh"可执行权限:

sudo chmod a+x copylib.sh

建立好脚本,下一步就需要找出应用程序以来的库了,这里分2步。

1)应用程序依赖的库

a)将"copylib.sh"复制到项目工程的"xxx-Release"目录下。

b)执行脚本命令(命令行参数可根据情况改变):

copylib.sh fixture

这时,在当前目录下会自动建立一个lib的文件夹,并把应用程序依赖的库全部复制到这里。

c)复制lib文件夹中所有内容到“1.准备工作”的lib文件夹。

2)libqxcb.so依赖的库

a)将"copylib.sh"复制到Qt开发工具下的"plugins/platforms"目录下。我的目录路径为:“/opt/Qt5.13.2/5.13.2/gcc_64/plugins/platforms”,如下图所示:

Linux环境下Qt应用程序打包与发布_第2张图片

b)执行脚本命令(因在系统目录,这里需要加sudo):

sudo copylib.sh libqxcb.so

这时,在当前目录下会自动建立一个lib的文件夹,并把"libqxcb.so"依赖的库全部复制到这里。

c)复制lib文件夹中所有内容到“1.准备工作”的lib文件夹,如有冲突直接覆盖掉。

至此,我们完成了“lib”文件夹的内容。

3.plugins文件夹

plugins文件夹主要放置Qt应用程序运行所依赖的一些插件。直接复制Qt开发工具下的"plugins"目录下的"platforms"目录到此文件夹。当然,如果应用程序还依赖其他插件可以将"plugins"目录下其他需要的插件一并拷贝。

至此,我们完成了“plugins”文件夹的内容。

4.bin文件夹

bin文件夹主要放置我们编译,链接好的应用程序及Qt相关的配置。

1)复制"xxx-Release"目录下的可执行文件到此文件夹。

2)建立配置文件"qt.conf",填充如下内容:

[Paths]
Prefix=../
Plugins=plugins

指定应用程序依赖的插件。

至此,我们完成了“bin”文件夹的内容。

5.主目录文件夹

应用程序要想运行,还需要配置相关的环境变量。建立1个以应用程序名称为文件名的脚本,如我的文件名为"fixture.sh",添加如下内容:

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname/lib
export LD_LIBRARY_PATH
$dirname/bin/$appname "$@"

这里指定了库的路径及应用程序的路径。赋予脚本可执行权限:

sudo chmod a+x fixture.sh

至此,我们完成了主目录文件夹的所有内容。

6.执行&测试

将打包后的内容拷贝到非开发环境机器(可用虚拟机建立1个基本运行环境),执行主目录下的脚本:

cd fixture
./fixture.sh

正常情况下,程序得以执行。

测试完成后就可以将文件夹打包压缩作为应用程序发布。

注意:在执行过程中若遇到插件加载错误,可执行:

export QT_DEBUG_PLUGINS=1

根据输出信息找出问题。

总结,本文介绍Linux环境下Qt应用程序的打包与发布。

你可能感兴趣的:(Qt编程,qt,linux)