如何使用库分发应用程序?

How to distribute an application with libraries?

我写了一个 Qt C++ 应用程序并想将它部署在 Windows、OSX 和 Linux 上。问题是,它只适用于安装了 Qt 的机器。

我如何让它在没有 Qt 的计算机上运行?我是否必须使用应用程序设置或其他方式安装它?我不明白整个链接的事情。

我不能代表 Windows,但 Linux 系统有一个包管理系统,可以检查所需的依赖项,因此所有这些都由包管理系统在安装时处理。您只需为您希望支持的每个发行版生成安装包,尽管由于相似性,许多发行版会接受相同的安装包。

Building an RPM

另外:Debian Packaging

这是 Linux 发行版使用的两个流行的包系统..

在 Windows,我们鼓励您随应用程序分发 Qt DLL 文件。只需将它们放在与安装文件中的可执行文件相同的文件夹中即可。

在 Linux 下,您可以使用包系统(参见 RPM,或 deb 包)

对于 Windows,您只需将 .ddl 文件包含在可执行文件中(为什么不将其压缩到安装程序中(参见 Easysetup 工具)

有一些很好的工具可以用来准备应用程序以供分发。 OSX 的 macdeployqt 和 Windows 的 windeployqt。他们将所有依赖项复制到应用程序文件夹中,因此您只需将该文件夹复制到另一台机器即可。对于 linux,您需要创建包。这特定于不同的 linux 版本。详细了解部署 here

对于 Windows,Pierre 和 ypnos 的回答很好。我会添加将 "are encouraged" 更改为 must 因为这是逃避 dll 地狱的唯一方法。使用安装程序的缺点是安装您的应用程序的用户需要管理员权限。只需压缩整个应用程序目录并向用户提供该 zip 文件就足以在任何 Windows 客户端计算机上获取它 运行。

对于 Linux 请参阅我的回答 我提供的解决方案基本上适用于任何 Linux 发行版。您将所有依赖项复制到应用程序目录并通过启动首先设置 LD_LIBRARY_PATH 的 shell 脚本来获取您的应用程序 运行。如果您有该脚本还创建了一个 Linux 桌面文件,您的用户可以从那时起双击该桌面文件。 运行 您的应用程序将对您的用户透明。许多主要的 Linux GUI 应用程序(如 Google 的 chrome)都是从桌面文件启动的。脚本的迂回是必要的,因为桌面文件中的应用程序目录是硬编码的,您无法预测用户想要部署您的应用程序的位置。使用包管理器并不是那么简单。此外,Linux 有大约二十个不同的包管理器。

对于OSX,您可以尝试使用 Qt 实用程序 macdeployqt。我们总是遇到该实用程序的问题。我们自己用 qmake 脚本来做。您告诉 Qt Creator 制作一个 app_bundle。我已经描述了 如何对 OSX Qt 应用程序进行数字签名。部分签名要求应用程序是独立的。您可以阅读我的答案的那一部分。如果将部署脚本与主 pro 文件分开,则可以为所有 OSX 应用程序重复使用该脚本。