我有一个我要分发的小游戏,但是我希望将它与所有需要的共享库一起发送,以便用户没有任何依赖项来安装。
这是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发行版中默认出现哪些?我应该在游戏中附带哪些?
答案 0 :(得分:0)
为什么将Linux / Unix应用程序作为源代码而不是二进制文件进行分发是如此普遍的原因 - 分发可在各种平台上运行的二进制文件非常困难。这与特定于发行版的软件存储库是Linux生活的特征相同。
问题是,尽管您列出的库通常可用,但它们的版本将不同于分发版。而且忽略了Linux在各种CPU和硬件架构上运行的真正基本问题。
如果你的程序可能是普遍感兴趣的,那么(在技术上,至少)处理供应的最简单方法是使源代码可用,例如,在github上,并说服分发维护者为他们的发行版构建它。发行版维护人员可以自动完成这类工作。
如果您不能这样做,那么我建议您可能需要使用可执行文件所有进行分发,但标准C库和平台库除外。也就是说,您可以假设C库,libdm,libpthread和libm中的兼容性;你需要提供的其他一切。您可以将库作为单独的文件提供,以及设置LD_LIBRARY_PATH以使其可用的某种脚本或包装器,或者只将它们链接到可执行文件中。坦率地说,如果主机系统比构建系统更老或更新,即使在平台库中也可能存在不兼容性。
或者您可以在运行时加载应用程序库,并使用某种逻辑尝试在主机系统中找到适当的库。并且,据推测,检查兼容性。这就是Java JVM通常所做的事情。
在一个Linux发行版上构建您的应用程序并且希望它可以在其他Linux发行版上工作,这样做非常有效。不幸的是