您的位置:

深入了解ld.so.conf

一、什么是ld.so.conf?

1、ld.so.conf是一个系统配置文件,用于指定系统在运行程序时要搜索的共享库路径。默认值包括/lib、/usr/lib以及/usr/local/lib。在这个文件中,每行都有一个路径被定义,被搜索的顺序是从上到下。

2、/etc/ld.so.conf是系统级别的配置文件,而/etc/ld.so.conf.d/目录是专门为一些软件或程序库设置的配置文件:

/etc/ld.so.conf.d/
├── libc.conf
├── usr.conf
├── x86_64-linux-gnu.conf
└── i386-linux-gnu.conf

可以看到在这个目录下多了一些文件,每个文件内仅包含一行或多行路径定义,而不是像/etc/ld.so.conf那样,一行一个路径。

二、如何修改ld.so.conf文件?

第一种方式是简单的修改文件本身。这个文件一般在/etc/ld.so.conf。如果要添加一个文件夹,简单地在文件的末尾添加新的路径即可。

第二种是创建一个新的文件名为yourname.conf或者其他定义,在/etc/ld.so.conf.d/ 目录下,只有文件扩展名为.conf才会被系统搜索。 每个*.conf文件之间不会影响,因为这些文件内的行是整体添加到搜索路径中。

假设我们将/usr/local/lib加入系统共享库路径:

[root@localhost ~]# vi /etc/ld.so.conf
    /lib  
    /usr/lib  
    #add the following line to /etc/ld.so.conf file  
    /usr/local/lib  
[root@localhost ~]# ldconfig 

修改内容后,我们需要运行“ldconfig”来刷新动态链接库缓存。当运行程序时需要动态链接库时,系统会先查找缓存,如果没有找到,就会按照/etc/ld.so.conf文件搜索路径顺序查找,再找不到的话就会在按照预定的环境变量中进行搜索。如下所示:

ldconfig -f conf_file

三、常用选项

在ld.so.conf文件中可以使用的选项有以下几种:

1、include 目录 ,表示添加一个新的搜索目录到/etc/ld.so.conf中。这条命令从追加的目录中查找.conf文件并自动包含它们的内容:

include /usr/local/etc/ld.so.conf.d/*.conf

2、machine machine-type ,表示添加一个指定类型的搜索路径:

/usr/local/lib/i686/nosegneg

3、hwcap HWCAP列表,要求指定硬件能力。指定了硬件能力之后,在该硬件平台下,只有满足能力列表的程序才会使用该文件夹下的共享库。

4、audit path ,启用动态链接器调试:

audit /usr/local/lib/libstdc++.so.6.0.13

四、总结

ld.so.conf是一种动态连接库配置方法,它可以向操作系统指定搜索路径,以用来建立库之间的链接。通过修改/etc/ld.so.conf文件或将相关文件存放在/etc/ld.so.conf.d/目录中的.conf文件中,可以添加和删除动态链接库搜索路径。正确配置ld.so.conf文件会提高程序运行效率以及解决库文件过多出现的各种问题。