基于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笔式驱动器工作
简短的答案是“使用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等。您可能不需要某些格式,但是如果与该库链接,则没有它们就无法运行。
考虑您可以考虑“始终存在”的库。例如。携带libX11或libc以及许多其他文件毫无意义。这部分是所有操作系统共享的-由于多种原因,您的程序无法获得一半的操作系统。
总而言之,使用启用了动态加载的SDL构建(我认为这是默认情况,目前已经有一段时间了),复制SDL / SDL_image,使用LD_LIBRARIES_PATH
设置libs位置,使用ldd
验证列表,并你应该没事的。不要复制libc,libstdc ++,libpthread,libm。