![/usr/lib 与 /etc/ld.so.conf.d](https://linux22.com/image/202471/%2Fusr%2Flib%20%E4%B8%8E%20%2Fetc%2Fld.so.conf.d.png)
长话短说为什么最好在以下位置放置指向共享库的符号链接/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
,并让它在运行时负责解密。