可能重复:
What’s the best way to distribute a binary application for Linux?
我们希望在Linux中发布专有游戏。游戏相对简单,有一个用C ++编写的自定义引擎。我们一直在Windows上使用MinGW编译器,一个人使用g ++编译器在Linux中进行编程和测试。
游戏是使用开源库专门编写的,这些库都是跨平台的。
什么是推荐的方法,使Linux程序可以跨所有Linux发行版工作,而无需打包任何Linux发行版?对我来说,理想的方法是将其打包为.zip或tarball并提供下载,就像在Windows下使用系统库的好的.exe文件一样。
我在Linux下玩过的大多数提供此类下载的游戏都会提供一个shell脚本(这本身就是一个兼容性问题!)。我对它没有任何问题,但它 reeks 的用户不友好。此外,许多游戏需要额外的库。例如,SDL 2.0是流行库的硬件加速新版本,在大多数发行版的存储库中尚未提供,但已知有几款游戏使用它,我不得不自己编译它。这更糟糕。
我想要一个解决方案,客户可以在他们选择的文件管理器中单击二进制文件,它将运行,没有“apt-getting”或“yumming”必要的库。我不介意违反标准,如果必须进入/ opt,它会。
答案 0 :(得分:3)
我想要一个解决方案,客户可以在他们选择的文件管理器中点击二进制文件,它会运行,没有'apt-getting'或'yumming'。我不介意违反标准,如果必须进入/ opt,它会。
首先,您必须了解“yumming”和“apt-getting”实际上并不是应用程序(软件包)的实际安装程序,它们只是用于查找/下载/更新/跟踪的前端程序存储库中的软件包(来自发行版和您手动添加的其他软件包)。所以,当你说“没有'得到'或'yumming'”时,我们必须假设你的意思是你不想把你的游戏放在存储库上,如果你想让人们付钱给你得到你的游戏(而不是其他专有但免费的软件,如闪存,图形驱动程序,视频编解码器,以及你通常在存储库中找到的其他东西)。
因此,实际上只有两种类型的包管理系统RPM和DEB,它们分别使用命令行程序rpm
和dpkg
来实际进行安装。大多数发行版也为这些程序提供了GUI前端(不是Synaptic风格的软件包管理软件(它是apt-get或yum的GUI前端),但更简单)。当您双击.deb
或.rpm
文件时,在大多数发行版上,您会弹出这个GUI前端,询问您是否需要管理员凭据并告诉您所需的依赖项,以及显然,您将要将此软件包安装到您的系统上。据我所知,这正是你想要的。因此,您需要提供的是.deb
文件(对于Debian发行版)和.rpm
(对于Red Hat发行版),对于32位和64位版本的游戏,就像我假设的那样您为Windows版本提供了.msi
文件。
对于用户可能难以找到的依赖项。您应该做的是在安装程序的某个目录中包含这些深奥依赖项的其他(“推荐”版本)程序包,以便在无法从发行版的存储库中获取较新版本时从这些脱机程序包中安装它们。这就是它。
你可以让人们付费购买游戏的deb或rpm安装程序,或者包含某种许可证密钥系统来解锁游戏(从而使deb / rpm文件可供下载和充电)用于解锁它的密钥/代码。)
对我来说,理想的方法是将其打包为.zip或tarball并提供下载,就像在Windows下使用系统库的好的'.exe文件一样。
理想?真!?!是的,如果您所做的只是使用系统库,那么它将起作用。但如果还有更多,那将是一场噩梦(几乎和你不依赖安装程序的Windows一样糟糕。)
游戏是使用开源库专门编写的,这些库都是跨平台的。
确保这些开源库都不是GPL许可的,因为如果是这种情况,则无法使您的游戏成为专有。您的依赖项必须根据LGPL或BSD或类似许可证进行许可,因此请注意这一点。
答案 1 :(得分:1)
为Linux制作程序的推荐方法是什么? 所有Linux发行版都不需要打包它们吗?
建议不开头。因此,您需要较少未经推荐的方式。我想这意味着产生一个静态链接的二进制文件(无论如何你需要一个32位和64位版本。)
推荐的方式是决定分发系统(RPM,DEB,...)并验证各种目标平台的依赖关系。然后,用户可以单击安装程序包 - 就像他/她使用Windows MSI文件一样 - 并且稍后也可以卸载/升级程序。
请注意,实际上,即使分发静态二进制文件,也必须为目标平台提供测试平台环境,因为您无法避免进行测试。那时,包装RPM / DEB /等并不是真正的时间消耗增加;另一方面,它会使包装更紧凑,更容易下载和安装。