首页 > 解决方案 > 在 Linux 上部署 Qt 应用程序

问题描述

我创建了一个不错的小型科学 Qt 应用程序,我想分发它。

在 Windows 中很容易做到这一点,我只是创建了一个文件夹,将我的可执行文件放在那里并调用windeployqt程序,该程序将所有必要.dll的文件放在文件夹中,如Qt5Core.dll, Qt5Gui.dll, Qt5Charts.dll... 它创建了一些子文件夹,如iconengines/,等等. 这个文件夹现在总共包含 43 个文件。当我将此文件夹复制到任何其他装有 Windows 10 的计算机时,它运行良好。imageformats/platforms/

我想在 Linux 上做同样的事情,因为它是我们使用的首选操作系统。

但是,我有点挣扎,因为我真的不知道如何开始。有可能以同样的方式做到这一点吗?将所有必要的库与可执行文件一起复制到一个文件夹中,并且可以简单地将其复制到另一台装有 Linux 的计算机上并运行它?(澄清一下:当我说 Linux 时,我指的是 Ubuntu 18.04 或 16.04)

还是有不同的方法来做到这一点?我只有学生许可证,所以我认为我不允许静态链接库(但我必须再次阅读许可条款才能确定)

如果它的工作原理相同。有没有一种简单的方法可以复制此文件夹中所有必要的库?还是我必须自己搜索 42 个库?

我已经阅读了手册,但老实说,我并没有理解其中的所有内容和所有示例代码。

谢谢您的帮助。

标签: c++linuxqtdeployment

解决方案


查看文档中的创建应用程序包链接。对于 Linux,将通过文档为您提供一个启动脚本作为起点。这里是:

#!/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
export LD_LIBRARY_PATH
$dirname/$appname "$@"

此脚本必须保存为.sh脚本,并且必须位于可执行文件的目录中。

使脚本可执行,打开终端并执行以下操作:

$ cd /pathToScript/
$ sudo chmod +x scriptName.sh

然后双击您的脚本运行。

如 Qt 文档中所述,这将使:

...确保动态链接器可以找到 Qt 库。请注意,您只需重命名脚本即可将其与其他应用程序一起使用。

如果你想静态部署你的项目,你必须首先有一个从源代码构建的静态版本的 Qt,可以在Qt Docs 的这个标题中找到。

还有一些注意事项:如果您想分发此项目以在 Linux 系统上使用它。您可以简单地打包构建文件夹。但要实际运行它,您需要在 Linux 系统上使用该脚本(至少是简单的方法)。没有必要去寻找应用程序的依赖项。


推荐阅读