5

我有一个要分发的闭源 Linux 应用程序。此应用程序使用 wxWidgets/GTK,因此该应用程序依赖的共享库(60+)的巨大列表。

发布应用程序并支持最大数量的发行版的首选方式是什么?

  • 是否为每个受支持的发行版构建应用程序并单独发布它们?这具有构建复杂(chroot 和每个发行版构建)的缺点,并且仅适用于受支持的发行版。

  • 是否在安装程序中添加所有共享库并将它们与 LD_LIBRARY_PATH 环境变量(如 VMware)一起使用?这具有增加安装程序大小的缺点。

  • 是构建一个完全静态的应用程序吗?这肯定是不可能的,因为它会破坏一些许可证。

  • 它是混合的还是其他选项?大多数商业供应商如何发布他们自己的图形(最好是基于 GTK)的应用程序?

4

3 回答 3

4

你应该看看Linux Standard Base。它专为帮助处于您位置的人而设计。它定义了一个 3rd 方应用程序开发人员可以依赖的环境——因此有 libc 和其他库的固定版本,并且某些程序和目录存在于已知位置。所有主要的 Linux 发行版都支持 LSB。

也就是说,您仍然应该为每个主要发行版专门打包结果 - 以便您的客户可以使用他们熟悉的包管理工具来管理您的应用程序。

于 2009-10-01T10:57:06.427 回答
3

基本上,有两种方法。如果你愿意,你可以选择两者。

第一种方式是游戏的常用方式,这样就可以了。创建一个 lib/ 子目录,使用LD_LIBARY_PATH并包含您需要的几乎所有共享库。这确保了用户的无痛体验,但确实使安装程序更大,并且可能内存占用也更大。我什至不会尝试重用预先存在的库,因为它们会随着系统的升级而消失。

第二种方式是提供分发包。这些通常并不难制作,然后会很好地与发行版集成,而且看起来更受您的客户欢迎。两个缺点是:您需要为每个发行版都这样做(Debian、Ubuntu、SuSE、redhat 可能是一个好的开始),并且您需要维护它们:随着时间的推移,一些库将不再可用在特定版本中,因此用户会遇到依赖性问题。

于 2009-10-01T08:32:58.000 回答
2

在您的安装程序中,检查安装了哪些库,然后下载未安装的二进制文件。

为了让您的用户更加舒适,如果没有连接到 Internet,请让安装程序生成一个密钥,您可以在您的网站上输入该密钥以接收 ZIP 存档,然后您可以将其提供给安装程序。

为了获得最大的舒适度,请检查目标发行版上可用的库,并要求用户使用标准管理工具来安装它们。这样,您就不会使用同一库的不同版本污染计算机。

也就是说:将有价值的代码放入链接库中,然后在源包中将其作为二进制 blob 提供可能更聪明。这样,您的代码就像在纯二进制文件中一样受到保护,用户可以在他们最喜欢的系统上编译胶水代码,而无需担心任何事情。

我的意思是:设置 UI 的代码部分值多少钱?如果有人偷了,你会损失多少?

于 2009-10-01T08:15:27.300 回答