ld.so.conf.d配置文件

本文介绍了Linux系统中动态库的加载机制,重点关注了/etc/ld.so.conf.d目录下的配置文件,这些文件用于指定动态库的路径。通过编辑这些配置文件,可以将新的库路径添加到系统中,然后使用ldconfig命令更新缓存。当软件无法运行时,可以使用ldd命令检查动态库的依赖情况。在实际操作中,直接在/etc/ld.so.conf中添加路径可能更为有效。

ld.so.conf.d用来加载Linux系统中的动态库文件的:

在/etc下我们会发现下面三个文件

ld.so.conf.d

ld.so.conf

ld.so.cache

使用cat ld.so.conf 以后可以看到是包含了ld.so.conf.d中的所有配置文件

[root@]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf

使用cd ld.so.conf.d后,可以看到cd ld.so.conf.d中的内容可以看到配置文件很多

[root@]# ll /etc/ld.so.conf.d/
total 16
-rwxr-xr-x 1 root root 29 3月  23 17:40 cbim.conf
-rw-rw-r-- 1 root root 38 11月 24  2014 fakeroot-x86_64-linux-gnu.conf
lrwxrwxrwx 1 root root 41 6月  23  2021 i386-linux-gnu_egl_conf -> /etc/alternatives/i386-linux-gnu_egl_conf
lrwxrwxrwx 1 root root 40 6月  23  2021 i386-linux-gnu_gl_conf -> /etc/alternatives/i386-linux-gnu_gl_conf
-rw-r--r-- 1 root root 44 1月  27  2016 libc.conf
-rw-r--r-- 1 root root 68 4月  15  2016 x86_64-linux-gnu.conf
lrwxrwxrwx 1 root root 43 6月  23  2021 x86_64-linux-gnu_EGL.conf -> /etc/alternatives/x86_64-linux-gnu_egl_conf
lrwxrwxrwx 1 root root 42 6月  22  2021 x86_64-linux-gnu_GL.conf -> /etc/alternatives/x86_64-linux-gnu_gl_conf
-rw-r--r-- 1 root root 56 6月  23  2021 zz_i386-biarch-compat.conf

在查看配置可以看到如下配置

[root@]# cat /etc/ld.so.conf.d/qt-x86_64.conf 
/usr/lib64/qt-3.3/lib

我增加一个配置文件

[root@]# vi /etc/ld.so.conf.d/userlocal.conf
/usr/local/lib

再次查看可以发现已经找到该目录下的动态库

[root@]# ldconfig  -p | grep libmcrypt
        libmcrypt.so.4 (libc6,x86-64) => /usr/local/lib/libmcrypt.so.4
        libmcrypt.so (libc6,x86-64) => /usr/local/lib/libmcrypt.so

但我实际操作过程中并不成功,而是在/etc/ld.so.conf中添加路径后,才生效。

相应的信息被缓存在ld.so.cache中了

通过string ld.so.cache可以查看到

如果出现软件无法运行的情况可以通过ldd命令查看是否因为动态库缺失导致程序无法启动

[root@]# ldd /sf_web/mysql/bin/mysql
        linux-vdso.so.1 =>  (0x00007fff3b5fc000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003ff8200000)
        librt.so.1 => /lib64/librt.so.1 (0x0000003ff8600000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003ff7e00000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f1380a06000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003ffbe00000)
        libm.so.6 => /lib64/libm.so.6 (0x0000003ff8e00000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003ffca00000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003ff7a00000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003ff7600000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003ff9e00000)

### 如何使Linux中的`ld.so.conf`文件生效 在Linux系统中,`/etc/ld.so.conf`文件用于配置动态链接库的搜索路径。为了使该文件中的配置生效,需要执行以下操作: #### 1. 修改或创建动态库路径 如果需要添加新的动态库路径,可以将路径直接写入`/etc/ld.so.conf`文件,或者在`/etc/ld.so.conf.d/`目录下创建一个新的配置文件[^1]。例如,如果需要将`/usr/local/lib`目录加入动态库搜索路径,可以通过以下两种方式实现: - 直接编辑`/etc/ld.so.conf`文件,添加一行`/usr/local/lib`。 - 在`/etc/ld.so.conf.d/`目录下创建一个新文件(如`local_lib.conf`),并在其中写入`/usr/local/lib`。 #### 2. 执行`ldconfig`命令 完成路径添加后,必须运行`ldconfig`命令以更新动态链接库缓存文件`/etc/ld.so.cache`[^4]。此命令会扫描`/etc/ld.so.conf`及其子目录中指定的所有路径,并将找到的动态库信息缓存到`/etc/ld.so.cache`文件中。只有当缓存文件被更新后,新增的动态库路径才会对系统生效。 ```bash sudo ldconfig ``` #### 3. 验证配置是否生效 可以通过以下方法验证动态库路径是否成功添加: - 使用`ldconfig -p`命令查看当前系统中所有已加载的动态库列表。如果新增路径中的库文件出现在列表中,则说明配置成功。 - 使用`ldd`命令检查目标程序是否能够正确解析所需的动态库。例如,对于某个可执行文件`myapp`,可以运行以下命令: ```bash ldd myapp ``` 如果输出中显示所有依赖的动态库均已找到,则表明配置正确。 #### 注意事项 - 如果动态库路径未通过`/etc/ld.so.conf`或`/etc/ld.so.conf.d/`配置,也可以临时通过环境变量`LD_LIBRARY_PATH`指定动态库搜索路径。例如: ```bash export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH ``` 但这种方式仅适用于当前会话,重启后配置失效。 - 确保新增路径下的动态库文件命名符合标准格式(如`lib*.so*`),否则可能无法被`ldconfig`识别[^1]。 ```bash # 示例:将~/exe目录中的动态库加入搜索路径 echo "~/exe" | sudo tee /etc/ld.so.conf.d/exe.conf sudo ldconfig ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值