Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部署C++;Linux中的游戏_Linux_Deployment - Fatal编程技术网

部署C++;Linux中的游戏

部署C++;Linux中的游戏,linux,deployment,Linux,Deployment,我是在Windows平台上工作的独立游戏开发人员,但实际上我对Linux及其应用程序的部署几乎没有经验。我正在完善我用C++11编写的基于SDL2.0的游戏,以及Windows上的其他几个跨平台依赖项(如AngelScript或PugiXML),我也想在Linux上发布它,对此有一些疑问。该游戏是商业的,封闭源代码,目前在Steam的GreenLite上,但我想发布免费的alpha版本,无论GreenLite状态如何,都可以从我的网站下载 1.)主要Linux发行版ABI(应用程序二进制接口)是

我是在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进行分发


请原谅,如果我问错了问题,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更改添加到整个图片中…:)

  • 这取决于分布的来源。通常,只要代码保持不变,就不需要在Fedora下的Ubuntu上重新编译程序。由于Ubuntu和Fedora必须使用相同的库(尽管可能在不同的位置),任何与OpenGL相关的东西都将是驱动程序问题;因此,几乎不需要重新编译软件。如果您必须重新编译您的软件,我会非常惊讶,因为所有发行版都使用几乎相同的库集/get bash/使用Linux内核,但有不同的包管理器。最后一部分是它变得复杂的地方:

  • 上述发行版具有不同的软件包管理器,这要求您相应地重新打包软件。您可以在tar.gz文件下发布预编译的二进制文件,只需让发行版维护人员为您打包软件;如果你想控制你的软件是如何分发的,那么你最好自己去做。由于许多包管理器都存在这个问题,人们仍然求助于通过一个make文件重新编译源代码,该文件可以通过cmake生成。只有当某些依赖项出于任何原因被“重命名”时,才会发生这种情况,在这种情况下,由于简单的名称更改,程序神奇地找不到依赖项。由于没有命名惯例,这甚至让生活更加艰难。这里最重要的优点是信任,其中信任让开发人员遵循命名约定,这样每个人都可以引用相同名称的相同包

  • 最好支持的发行版是最流行的发行版:Ubuntu和openSUSE将是很好的起点。Linux Mint、Fedora、Red Hat和Debian us