如何在 Linux 上正确发布 C++ 软件(游戏)
How to properly release C++ software (game) on Linux
我用自己新开发的2D/3D游戏引擎制作了一个小测试游戏(Pacman-clone)。我没有使用任何 IDE 来创建它,而是仅使用 vim 和 premake5 来创建 Makefile。我唯一的依赖是用于 window creation/events 的 SDL2 和用于渲染的 OpenGL。所以我没有使用任何框架,如 Unity、Qt、...
该游戏应该是商业的和闭源的,否则我会分发源代码并可能创建一些包,如 .deb 之类的东西。但这不是一个选择。它应该以二进制形式交付,不需要用户安装其他包。
假设我想将这款游戏发布到 public,比如说在 GOG 或 Steam 或其他平台上(这不是我对这个测试游戏的意图,但它可能在未来与其他东西)。如何正确释放它?
我尝试了以下方法:我创建了一个带有最新 Ubuntu(最小安装)的虚拟机(因为 Ubuntu 通常是 OS 支持的 Linux 游戏),然后我将编译后的可执行文件复制到上面。我启动它并收到缺少库的通知。我将库(来自我构建可执行文件的 Arch Linux 的 so 文件)添加到同一目录,并将库路径设置为 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:。包括当前目录。我创建了一个 start.sh 脚本,它在包含此设置的单行中启动游戏。
它在我的机器上运行,所以我把它传给了使用 Linux Mint 的人。他无法启动它,因为他得到了"GLIBC_2.29 not found"。不知道能不能通过我的GLIBC版本
我猜我的 Arch Linux(我创建可执行文件的地方)带有比他拥有的更新版本的 GLIBC。
那么,你是如何解决这个问题的?还是我在这个过程中完全出错了,我应该采取不同的方式吗?
编辑:我发现 this link 这似乎与我使用的方法一致,但没有提及我遇到的问题,例如 glibc。
编辑:Steam/GOG/Itch 运行 原生 Linux 上有很多游戏(我不是在谈论 Mono 游戏和那些在内部使用 wine 的游戏)。我可以在 Arch、Mint 上播放它们……没有问题。他们似乎也没有许可证问题。
编辑:我很感谢托管应用程序商店的链接以及管理软件的类似内容,它们当然值得考虑,但我不喜欢这样的事实,即我需要某种帐户(与毫无疑问,许可协议可能会在某些时候产生费用),而我的 Steam 和 GOG 库中有游戏 运行 本机在我拥有的任何 Linux 发行版上没有所有这些。
你考虑过 Flatpak 吗?
它允许您将游戏与所有必需的依赖项打包在一起。
此外,每个人都可以 运行 在相同的 运行 时间环境中玩您的游戏,而不管他们选择什么 Linux 发行版。这样你就不会遇到这种情况了...
I guess that my Arch Linux (where I created the executable) comes with a newer version of GLIBC than he has.
您可能想看看 Snapcraft. Though it generally focuses on Ubuntu-based distros, it has generally good compatibility with others as well. It also has a tutorial for packaging apps in C++,这可能会有用。尽管快照通常通过 Snap Store 分发,但理论上您可以单独分发它们。
我找到了一个似乎有效的解决方案,我认为 Steam/GOG/Itch 上其他不使用 wine/mono/... 的游戏也使用了它们 windows Linux.
上的游戏工作
我安装了 Ubuntu 18(或者 16,如果你希望它也能在旧操作系统上工作)并在那里设置我的构建环境(我不得不重写我的一些 C++ 代码,因为不是所有新的 C++ 约定尚可用)。然后我安装了另一台 Ubuntu 18 机器并在那里启动了可执行文件。它告诉我它缺少哪些库,我从我的 build-Ubuntu 18 中手动添加了每一个。之后,我的游戏运行了。
然后我安装了 Linux Mint 19 万岁...成功了!
然后我 运行 Ubuntu 20 和 Arch Linux(最新更新)上的可执行文件,它需要另一个我也从我的构建中获得的库-Ubuntu 18 岁,成功了。
我将可执行文件传递给了其他人,它在他的 Linux 机器上也运行良好...
我的意思是:如果我为最低版本的 glibc 构建它,它似乎在较新的系统上也能正常工作。
这可能不是最防水的系统,但至少,就像 Steam/GOG 上的几乎所有其他游戏一样,我现在可以说该游戏将 运行 [=36] =] 18, Ubuntu 20 并且知道它也适用于其他几个发行版。
而且我不需要任何第三方工具,例如 Flatpak 和 Snapcraft。我可能最终仍会使用它们来支持他们的公益事业,也因为它也有助于传播我的游戏。但是,当然,我首先需要完成我的真实游戏...
我将此标记为解决方案,只要我不在第三方服务上创建帐户就没有人能给我更好的解决方案。
我用自己新开发的2D/3D游戏引擎制作了一个小测试游戏(Pacman-clone)。我没有使用任何 IDE 来创建它,而是仅使用 vim 和 premake5 来创建 Makefile。我唯一的依赖是用于 window creation/events 的 SDL2 和用于渲染的 OpenGL。所以我没有使用任何框架,如 Unity、Qt、...
该游戏应该是商业的和闭源的,否则我会分发源代码并可能创建一些包,如 .deb 之类的东西。但这不是一个选择。它应该以二进制形式交付,不需要用户安装其他包。
假设我想将这款游戏发布到 public,比如说在 GOG 或 Steam 或其他平台上(这不是我对这个测试游戏的意图,但它可能在未来与其他东西)。如何正确释放它?
我尝试了以下方法:我创建了一个带有最新 Ubuntu(最小安装)的虚拟机(因为 Ubuntu 通常是 OS 支持的 Linux 游戏),然后我将编译后的可执行文件复制到上面。我启动它并收到缺少库的通知。我将库(来自我构建可执行文件的 Arch Linux 的 so 文件)添加到同一目录,并将库路径设置为 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:。包括当前目录。我创建了一个 start.sh 脚本,它在包含此设置的单行中启动游戏。
它在我的机器上运行,所以我把它传给了使用 Linux Mint 的人。他无法启动它,因为他得到了"GLIBC_2.29 not found"。不知道能不能通过我的GLIBC版本
我猜我的 Arch Linux(我创建可执行文件的地方)带有比他拥有的更新版本的 GLIBC。
那么,你是如何解决这个问题的?还是我在这个过程中完全出错了,我应该采取不同的方式吗?
编辑:我发现 this link 这似乎与我使用的方法一致,但没有提及我遇到的问题,例如 glibc。
编辑:Steam/GOG/Itch 运行 原生 Linux 上有很多游戏(我不是在谈论 Mono 游戏和那些在内部使用 wine 的游戏)。我可以在 Arch、Mint 上播放它们……没有问题。他们似乎也没有许可证问题。
编辑:我很感谢托管应用程序商店的链接以及管理软件的类似内容,它们当然值得考虑,但我不喜欢这样的事实,即我需要某种帐户(与毫无疑问,许可协议可能会在某些时候产生费用),而我的 Steam 和 GOG 库中有游戏 运行 本机在我拥有的任何 Linux 发行版上没有所有这些。
你考虑过 Flatpak 吗?
它允许您将游戏与所有必需的依赖项打包在一起。
此外,每个人都可以 运行 在相同的 运行 时间环境中玩您的游戏,而不管他们选择什么 Linux 发行版。这样你就不会遇到这种情况了...
I guess that my Arch Linux (where I created the executable) comes with a newer version of GLIBC than he has.
您可能想看看 Snapcraft. Though it generally focuses on Ubuntu-based distros, it has generally good compatibility with others as well. It also has a tutorial for packaging apps in C++,这可能会有用。尽管快照通常通过 Snap Store 分发,但理论上您可以单独分发它们。
我找到了一个似乎有效的解决方案,我认为 Steam/GOG/Itch 上其他不使用 wine/mono/... 的游戏也使用了它们 windows Linux.
上的游戏工作我安装了 Ubuntu 18(或者 16,如果你希望它也能在旧操作系统上工作)并在那里设置我的构建环境(我不得不重写我的一些 C++ 代码,因为不是所有新的 C++ 约定尚可用)。然后我安装了另一台 Ubuntu 18 机器并在那里启动了可执行文件。它告诉我它缺少哪些库,我从我的 build-Ubuntu 18 中手动添加了每一个。之后,我的游戏运行了。
然后我安装了 Linux Mint 19 万岁...成功了!
然后我 运行 Ubuntu 20 和 Arch Linux(最新更新)上的可执行文件,它需要另一个我也从我的构建中获得的库-Ubuntu 18 岁,成功了。
我将可执行文件传递给了其他人,它在他的 Linux 机器上也运行良好...
我的意思是:如果我为最低版本的 glibc 构建它,它似乎在较新的系统上也能正常工作。
这可能不是最防水的系统,但至少,就像 Steam/GOG 上的几乎所有其他游戏一样,我现在可以说该游戏将 运行 [=36] =] 18, Ubuntu 20 并且知道它也适用于其他几个发行版。
而且我不需要任何第三方工具,例如 Flatpak 和 Snapcraft。我可能最终仍会使用它们来支持他们的公益事业,也因为它也有助于传播我的游戏。但是,当然,我首先需要完成我的真实游戏...
我将此标记为解决方案,只要我不在第三方服务上创建帐户就没有人能给我更好的解决方案。