我有一个我想分发的闭源Linux应用程序。这个应用程序正在使用wxWidgets / GTK,因此有一个巨大的共享库列表(60+),这个应用程序依赖它。
发布应用程序并支持最大数量的发行版的首选方式是什么?
是为每个支持的发行版构建应用程序并单独发布它们吗?这样做的缺点是构建起来很复杂(每个发行版都有chroot和build),并且只能支持分发。
是否要在安装程序中添加所有共享库,并将它们与LD_LIBRARY_PATH env变量(如VMware)一起使用?这具有增加安装程序大小的缺点。
是构建完全静态的应用程序吗?这肯定是不可能的,因为它会打破一些许可证。
这是混合使用还是其他选择?大多数商业供应商如何发布他们自己的图形(最好是基于GTK的)应用程序?
答案 0 :(得分:4)
你应该看一下Linux Standard Base。它专为帮助您所在位置的人而设计。它定义了第三方应用程序开发人员可以依赖的环境 - 因此设置了libc和其他库的版本,并且某些程序和目录存在于已知位置。所有主要的Linux发行版都支持LSB。
尽管如此,您仍然应该专门为每个主要发行版打包结果 - 只是为了让您的客户可以使用他们熟悉的包管理工具来管理您的应用。
答案 1 :(得分:3)
基本上,有两种方法。如果您愿意,您可以选择两者。
第一种方式是常见的游戏方式等。创建一个lib /子目录,使用LD_LIBARY_PATH
并包含您需要的每个共享库。这确保了用户的无痛体验,但确实使安装程序更大,并且内存占用也更大。我甚至不会尝试重用预先存在的库,因为随着系统的升级,它们往往会消失。
第二种方法是提供分发包。这些通常并不难,并且将与发行版很好地集成,并且对您的客户而言似乎更加欢迎。两个缺点是:你需要为每个发行版做这个(Debian,Ubuntu,SuSE,redhat可能是一个好的开始),你需要维护它们:随着时间的推移,一些库将不再可用在特定版本中,因此用户将获得依赖性问题。
答案 2 :(得分:2)
在安装程序中,检查安装了哪些库,然后下载非二进制文件库的二进制文件。
为了让用户更舒适,如果没有连接到互联网,请让安装程序生成一个密钥,您可以在网站上输入该密钥以接收ZIP存档,然后您可以将其提供给安装程序。
为了获得最大的舒适度,请检查目标发行版上可用的库,并要求用户使用标准管理工具进行安装。这样,您就不会使用同一个库的不同版本污染计算机。
这就是说:将有价值的代码放入链接库然后在源包中提供二进制blob可能会更聪明。这样,您的代码就像在纯二进制文件中一样受到保护,用户可以在他们喜欢的系统上编译粘合代码而无需担心内容。
我的意思是:设置用户界面的代码部分值多少钱?当有人偷了这么多你会失去多少?