c++ - 在 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 个库?
我已经阅读了手册,但老实说,我并没有理解其中的所有内容和所有示例代码。
谢谢您的帮助。
解决方案
查看文档中的创建应用程序包链接。对于 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 系统上使用该脚本(至少是简单的方法)。没有必要去寻找应用程序的依赖项。
推荐阅读
- python - 使用 Python 中的 package_create API 调用创建包含资源的包
- amazon-cloudformation - 在创建弹性搜索域时,我可以将 aws cognito 用于 cloudformation 的 kibana 吗?
- python - 我在使用 Python pip 安装 Pyhook 时遇到错误“无法导入 main”
- ruby - 如何找到到给定位置的线串的最近点 - rgeo
- c# - NPOI C# - 使用空白引用评估公式单元格
- django - 我想从类方法重定向到 url
- django - 复选框启用文本输入
- javascript - 如何让 Visual Studio Code (VS Code) 显示对象的方法预览?
- sass - 如果 css 和 scss 是静态中的单独同级文件夹,如何设置 PhpStorm scss 观察程序
- javascript - 如何在反应中循环数据并将值分配给状态数组