我的 SDL2 程序需要哪些二进制文件才能在未安装 SDL2 的另一台计算机上运行

What are the binaries files needed to my SDL2 program so it works in another computer without SDL2 installed

我的基于 SDL2 的程序必须附带哪些二进制文件才能在未安装 SDL 的另一台计算机上运行?

我的程序所需的库:

iostream
SDL2/SDL.h
SDL2/SDL_image.h
ctime
cstdlib

我已经尝试使用的二进制文件:

libSDL2.so
libSDL2-2.0.so.0.8.0
libSDL2_image.so
libSDL2_image-2.0.so.0.2.1

PS: 我正在测试我的程序包是否适用于可启动的 Xubuntu 笔式驱动器

简短的回答是 "use ldd"。长答案如下。

ldd ./your_program 将显示所有 运行 时间依赖项的递归列表(您的和您使用的每个库的依赖项,以及它们的依赖项,...)。

readelf -d ./your_program | grep NEEDED 将显示您的直接依赖项(只有您的程序实际链接的那些 - 并不一定意味着您只能复制那些)。

LD_DEBUG envvar 可用于跟踪在 运行 时间加载了哪些库(例如 dlopen)。

如果您针对一个特定的发行版,那么构建具有指定依赖项的包可能会更简单,例如apt 将为您安装 SDL。

下一个大问题是您从哪里获得 SDL。许多发行版禁用 SDL 动态加载器,因此它不会 运行 没有例如libX11, wayland, libXi, pulseaudio, ... 发行版这样做是非常好的,因为它从来没有打算让你只是将一些库复制到另一台机器上。如果您自己构建它,您可以拥有更少的直接依赖关系,SDL 将尝试 dlopen 它需要的任何东西。 SDL2_image 可能是更简单的示例 - 它可能依赖于 libjpeg、libpng、libz、...,您可能不需要某些格式,但如果您已链接到这些库,则无法 运行 没有他们。

考虑您可以考虑哪些库 'always there'。例如。携带 libX11 或 libc 以及许多其他软件是没有意义的。这部分为所有 OS 共享 - 由于多种原因,您的程序无法获得 OS 的一半。

总结一下,使用启用动态加载的 SDL 构建(我认为它现在是默认设置已经有一段时间了),复制 SDL/SDL_image,使用 LD_LIBRARIES_PATH 设置你的库位置,验证列出 ldd,你应该没问题。不要复制libc、libstdc++、libpthread、libm。