在Linux上如何分发.so文件?

3

我有一个共享库(.so文件),我的应用程序需要这个库,我想知道最好的分发方式是什么?

这不是可以通过apt-get安装的东西,为了运行应用程序,我需要将它放在LD路径中。


1
如果目标系统具有所有依赖项,则只需将其放在动态运行时链接器ld.so查找的路径中即可。 - Some programmer dude
2个回答

7

过去我需要包括一个单独的“启动脚本”,用户需要点击它而不是直接点击Linux可执行文件。启动脚本将设置LD_LIBRARY_PATH以包括存储共享库的目录,然后启动可执行文件。以下是参考脚本(它假定可执行文件和共享库都隐藏在名为“bin”的子文件夹中,并且可执行文件的名称与脚本的名称相同,但没有“.sh”后缀):

#!/bin/bash
appname=$(basename "$0" .sh)
dirname=$(dirname "$0")
cd "$dirname/bin"
export LD_LIBRARY_PATH=$(pwd):$LD_LIBRARY_PATH
./$appname "$@"

难道不应该是 export LD_LIBRARY_PATH=$(pwd):$LD_LIBRARY_PATH 吗?这样,如果程序运行其他东西,就会使用正确的其他库路径。当然,这就是我在你的脚本类似物中一直做的事情。鉴于它是Linux,您可以安全地假设 $0 对于脚本具有绝对路径,但实际上并非每个平台都是这样。经典地,$0 只包含程序或脚本的基本名称。 - Jonathan Leffler
@JonathanLeffler 是的,那很有道理;我会改变它。谢谢! - Jeremy Friesner

2

将它与依赖它的可执行文件一起打包,以相同的方式分发。

如果您没有编写该库,请确保遵守其重新分发的许可条款。


1
但是如果它在同一个目录中,它就不会被识别,只有当它在/usr/lib/或其他LD目录中时才会被识别? - Steven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接