TL;DR为什么将符号链接放置到共享库更好,/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-ish。
我偶尔会遇到这种情况,因为我们必须加密(并且仅在运行时解密)特定库。ldconfig
加密时无法识别库(仍为 ELF 格式),因此对我来说唯一合适的方法是将指向特定 *.so 文件的链接放在/usr/lib64
作为一般规则,
/usr
除了/usr/local
“属于”您的分配之外的所有内容。您应该避免在那里添加文件(甚至是符号链接)。添加新的配置文件
/etc/ld.so.conf.d
更易于维护:您的更改不会被包管理器撤消,但任何系统管理员都可以轻松管理它们。以干净的方式解决您的加密要求将更加复杂;一种方法可能是在由 in 中的文件指定的目录中拥有一个存根库,
/etc/ld.so.conf.d
并让它在运行时负责解密。