哪个共享库附带游戏(linux)?

时间:2017-10-20 01:26:03

标签: linux shared-libraries

我有一个我要分发的小游戏,但是我希望将它与所有需要的共享库一起发送,以便用户没有任何依赖项来安装。

这是ldd:

的输出
    linux-vdso.so.1 (0x00007fff311c4000)
    libm.so.6 => /usr/lib/libm.so.6 (0x00007fcca3449000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fcca3245000)
    libGL.so.1 => /usr/lib/libGL.so.1 (0x00007fcca2fba000)
    libGLEW.so.2.1 => /usr/lib/libGLEW.so.2.1 (0x00007fcca2d12000)
    libSDL2-2.0.so.0 => /usr/lib/libSDL2-2.0.so.0 (0x00007fcca29f6000)
    libSDL2_image-2.0.so.0 => /usr/lib/libSDL2_image-2.0.so.0 (0x00007fcca27d3000)
    libSDL2_ttf-2.0.so.0 => /usr/lib/libSDL2_ttf-2.0.so.0 (0x00007fcca25cb000)
    libSDL2_mixer-2.0.so.0 => /usr/lib/libSDL2_mixer-2.0.so.0 (0x00007fcca237c000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fcca215e000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007fcca1da7000)
    /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fcca3a68000)
    libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007fcca1b75000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00007fcca1836000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x00007fcca1624000)
    libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007fcca136e000)
    librt.so.1 => /usr/lib/librt.so.1 (0x00007fcca1166000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007fcca0ea0000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007fcca0c77000)
    libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007fcca0a67000)
    libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007fcca0830000)
    libz.so.1 => /usr/lib/libz.so.1 (0x00007fcca0619000)
    libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007fcca0380000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00007fcca017c000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007fcc9ff76000)
    libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007fcc9fc63000)
    libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00007fcc9fa37000)
    libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007fcc9f7c4000)

我如何知道在任何Linux发行版中默认出现哪些?我应该在游戏中附带哪些?

1 个答案:

答案 0 :(得分:0)

为什么将Linux / Unix应用程序作为源代码而不是二进制文件进行分发是如此普遍的原因 - 分发可在各种平台上运行的二进制文件非常困难。这与特定于发行版的软件存储库是Linux生活的特征相同。

问题是,尽管您列出的库通常可用,但它们的版本将不同于分发版。而且忽略了Linux在各种CPU和硬件架构上运行的真正基本问题。

如果你的程序可能是普遍感兴趣的,那么(在技术上,至少)处理供应的最简单方法是使源代码可用,例如,在github上,并说服分发维护者为他们的发行版构建它。发行版维护人员可以自动完成这类工作。

如果您不能这样做,那么我建议您可能需要使用可执行文件所有进行分发,但标准C库和平台库除外。也就是说,您可以假设C库,libdm,libpthread和libm中的兼容性;你需要提供的其他一切。您可以将库作为单独的文件提供,以及设置LD_LIBRARY_PATH以使其可用的某种脚本或包装器,或者只将它们链接到可执行文件中。坦率地说,如果主机系统比构建系统更老或更新,即使在平台库中也可能存在不兼容性。

或者您可以在运行时加载应用程序库,并使用某种逻辑尝试在主机系统中找到适当的库。并且,据推测,检查兼容性。这就是Java JVM通常所做的事情。

在一个Linux发行版上构建您的应用程序并且希望它可以在其他Linux发行版上工作,这样做非常有效。不幸的是