部署Linux游戏,共享库/依赖项

Joh*_*ohn 2 linux sdl

我有一个跨平台的应用程序(游戏).它使用SDL库.由于LGPL许可,我无法静态链接它.在Windows上我捆绑了DLL文件,在Mac OSX上捆绑了Frameworks目录.但是如何在GNU/Linux上解决它呢?如果用户的系统上没有安装SDL库,则会出现错误:

加载共享库时出错:libSDL-1.2.so.0:无法打开共享对象文件:没有这样的文件或目录

即使我捆绑.so文件,系统似乎也没有使用它.

另一个问题是我不想强行覆盖用户库.SDL不是问题,但是例如OpenAL库差异很大,用户可以使用OpenAL库,而我的机器可能会崩溃.

Chr*_*rle 6

默认情况下,Linux不搜索当前目录,也不搜索运行二进制文件的目录.如果您想要简单的方法,请执行以下操作:

$> LD_PRELOAD=/path/to/your.so programName
Run Code Online (Sandbox Code Playgroud)

正确的方法是设置LD_LIBRARY_PATH环境变量,这是一个以冒号分隔的搜索路径列表.将库的路径添加到此列表中.

$> export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/your/libs"
$> programName
Run Code Online (Sandbox Code Playgroud)

如果您真的想要发挥创意,如果您正确配置它,您的二进制文件实际上可以包含自己的搜索路径:

http://www.eyrie.org/~eagle/notes/rpath.html