/usr/lib 与 /etc/ld.so.conf.d

/usr/lib 与 /etc/ld.so.conf.d

长话短说为什么最好在以下位置放置指向共享库的符号链接/etc/lib(64)/,或者为什么最好在以下位置创建 *.conf 文件/etc/ld.so.conf.d/


.conf 文件

假设我在 处有我的自定义二进制文件/opt/foo/,并附带它自己的共享库。常见的方法(我知道)是将文件放置在/etc/ld.so.conf.d/foo.conf如下位置:

# Link foo libraries. This file is included in /etc/ld.so.conf
/opt/foo/lib
/opt/foo/otherlibs

然后运行ldconfig

符号链接

但我发现我也可以将我的库链接到/usr/lib(或 lib64),如下所示:

for f in /etc/foo/{lib,otherlibs}/*; do
  ln -s $f /usr/lib64/$(basename $f)
done

之后我就不用再跑了ldconfig

这两种方式的优点/缺点是什么?

我可以想象,在升级应用程序或库版本时,“符号链接”方式不太好处理。总的来说,“.conf”方式对我来说似乎更加模块化并且更加 Linux 风格。

我偶尔会遇到这种情况,因为我们必须加密(并且仅在运行时解密)特定的库。ldconfig加密时无法识别该库(仍然是 ELF 格式),因此对我来说唯一合适的方法是将特定 *.so 文件的链接放在/usr/lib64

答案1

作为一般规则,/usr除了/usr/local“属于”之外的所有内容都属于您的发行版。您应该避免在那里添加文件(甚至符号链接)。

添加新的配置文件/etc/ld.so.conf.d更易于维护:您的更改不会被包管理器撤消,但任何系统管理员都可以轻松管理它们。

以干净的方式满足您的加密要求会更加复杂;一种方法可能是在 中的文件指定的目录中拥有一个存根库/etc/ld.so.conf.d,并让它在运行时负责解密。

相关内容