我的SDL2程序需要什么二进制文件,因此它可以在未安装SDL2的另一台计算机上工作

问题描述 投票:0回答:1

基于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笔式驱动器工作

c++ ubuntu sdl sdl-2
1个回答
0
投票

简短的答案是“使用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。

© www.soinside.com 2019 - 2024. All rights reserved.