部署C++;Linux中的游戏
我是在Windows平台上工作的独立游戏开发人员,但实际上我对Linux及其应用程序的部署几乎没有经验。我正在完善我用C++11编写的基于SDL2.0的游戏,以及Windows上的其他几个跨平台依赖项(如AngelScript或PugiXML),我也想在Linux上发布它,对此有一些疑问。该游戏是商业的,封闭源代码,目前在Steam的GreenLite上,但我想发布免费的alpha版本,无论GreenLite状态如何,都可以从我的网站下载 1.)主要Linux发行版ABI(应用程序二进制接口)是否兼容?或者我需要在每个受支持的发行版/平台上编译我的游戏吗 2.)如果是,哪些发行版/平台是支持的合理选择 3.)在Linux上安装应用程序及其依赖项的最佳方式是什么?我读过关于deb和rpm系统的文章,但仍然很困惑——有没有办法为各种发行版自动生成安装包 4.)Steam如何与Linux协同工作?我应该如何准备我的应用程序以便通过it进行分发部署C++;Linux中的游戏,linux,deployment,Linux,Deployment,我是在Windows平台上工作的独立游戏开发人员,但实际上我对Linux及其应用程序的部署几乎没有经验。我正在完善我用C++11编写的基于SDL2.0的游戏,以及Windows上的其他几个跨平台依赖项(如AngelScript或PugiXML),我也想在Linux上发布它,对此有一些疑问。该游戏是商业的,封闭源代码,目前在Steam的GreenLite上,但我想发布免费的alpha版本,无论GreenLite状态如何,都可以从我的网站下载 1.)主要Linux发行版ABI(应用程序二进制接口)是
请原谅,如果我问错了问题,Linux的整个世界对我来说都是全新的,我在阅读各种文章和手册时迷失了方向…我不是游戏开发人员,我来自开源社区,因此无法真正就二进制文件的交付提供建议。不过,我将尝试回答您的一些问题: Valve有一个steam运行时,您可以在linux()上瞄准它-这将是移植游戏的最佳方式。我在youtube上看到他们的一个Linux开发视频中提到了它,我的理解是它捆绑了一堆库,包括SDL,并且它是为了模拟特定版本的ubuntu而设置的。因此,如果您针对steam运行时编写游戏,它将在steam也已移植的任何linux发行版中运行
至于包装你的游戏,要考虑的一件事是,如果你把它打包成DEB或RPM,并指示它依赖于发行版提供的图书馆,那么你的应用程序可能会在图书馆被更新时中断(有些DistOS经常更新LIBS,其他的则更稳定)。针对系统库的动态链接对于开源非常有效,因为当库发生变化时,人们可以修补代码,这对于封闭源码的东西来说并不理想
您可以在构建时静态链接二进制文件,这意味着您有一个更大的二进制文件。但是,当libs更新时,你不必担心应用程序崩溃 像Chrome这样的一些程序会捆绑自己的LIB(本质上是系统LIB的分支),这使得下载量大得多,但也有可能导致安全问题,人们往往对此表示不满。(请参阅:)1。)不,主要Linux发行版的ABI不完全兼容。从狭义上讲,它们基本上是相容的。但从更广泛的意义上讲,系统的某些元素在工作、配置等方面存在许多差异。哦,制作“包”本身并不是一个大问题,只是一些工作。此外,适用于“主要”发行版(如Debian)的内容(几乎总是)适用于所有衍生产品(如Ubuntu、Mint…) 2.)一个好的开始支持列表是:Debian(.deb)、RedHat和Fedora(.rpm两者)。他们的软件包格式和工具都是成熟和众所周知的。这将“覆盖”许多衍生品 3.)有一些“交叉分发”包生成器,但大多数都不适合这项任务。一旦掌握了诀窍,为大多数包格式编写定义脚本并不难。此外,一些商业工具具有针对Linux的“安装脚本生成器”,可以为您处理各种事情(它们不生成.deb或.rpm,而是一个复杂的shell脚本,类似于Windows EXE安装程序) 对不起,我对蒸汽知之甚少。O:) 因此,根据我的经验,最好的方法是接受一个丑陋的事实,即你必须选择一些主要的发行版及其版本(“因为不同版本之间的情况可能会有很大的变化”)并为它们制作软件包,并经常对所有发行版进行测试。很高兴您没有开发一些长寿命的内核模块/驱动程序,因为如果您将跟踪内核API更改添加到整个图片中…:)