一、什么是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
文件会提高程序运行效率以及解决库文件过多出现的各种问题。