💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC]   库文件在链接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把**/lib**和**/usr/lib**两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。但是,对于处于默认库搜索路径之外的库,就需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用: 1. 在环境变量`LD_LIBRARY_PATH`中指明库的搜索路径。 2. 在`/etc/ld.so.conf`文件中添加库的搜索路径。 **方法一**   要在 Linux 系统中添加库路径,我们很容易想到环境变量`LD_LIBRARY_PATH`。这种设置方式很简单,也不需要 root 权限,命令格式如下: ``` $ export LD_LIBRARY_PATH=<your-lib-path>:$LD_LIBRARY_PATH ``` 例如: ``` $ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH ```   可以用如下命令查看`LD_LIBRAY_PATH`是否设置成功。 ``` $ echo $LD_LIBRARY_PATH ```   要注意的是,这种方法只是临时设置环境变量`LD_LIBRARY_PATH`,重启或打开新的 Shell 之后,一切设置将不复存在。为了让这种方法更完美一些,可以将该`LD_LIBRARY_PATH`的`export`语句写到系统文件中,例如`/etc/profile`、`/etc/export`、`~/.bashrc`或者`~/.bash_profile`等等。   写在不同文件对该语句的读取时机会有所不同,例如,`~/.bashrc`在每次登陆和每次打开 shell 都读取一次,而`~/.bash_profile`只在登陆时读取一次。但是对于嵌入式Linux来说,有些文件可能没有,这就需要根据目标机器的情况来设置了。我一般是加到`~/.bashrc`中,将 export 语句添加在该文件的未尾。修改完后,还差一步,使配置生效!可以打开一个 Shell,或者使用`source`或`.`(点命令)使配置文件生效。如: ``` $ source ~/.bashrc ``` **方法二**   将自己可能存放库文件的路径都加入到`/etc/ld.so.conf`中是明智的选择,因为这种添加库路径的效果是永久的。添加方法也很简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如: ``` /usr/X11R6/lib /usr/local/lib /opt/lib ```   需要注意的是:这种搜索路径的设置方式对于程序连接时的库(包括共享库和静态库)的定位已经足够了,但是对于使用了共享库的程序的执行还是不够的。这是因为为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,所以是直接读取库列表文件`/etc/ld.so.cache`从中进行搜索的。   `/etc/ld.so.cache`是一个非文本的数据文件,不能直接编辑,它是根据`/etc/ld.so.conf`中设置的搜索路径由`/sbin/ldconfig`命令将这些搜索路径下的共享库文件集中在一起而生成的(ldconfig 命令要以 root 权限执行)。因此,为了保证程序执行时对库的定位,在`/etc/ld.so.conf`中进行了库搜索路径的设置之后,还必须要运行`/sbin/ldconfig`命令更新`/etc/ld.so.cache`文件之后才可以。   简单的说,`ldconfig`的作用就是将`/etc/ld.so.conf`列出的路径下的库文件缓存到`/etc/ld.so.cache`以供使用。因此当安装完一些库文件(例如刚安装好 glib),或者修改`ld.so.conf`增加新的库路径后,需要运行一下`/sbin/ldconfig`使所有的库文件都被缓存到`ld.so.cache`中。如果没做,即使库文件明明就在`/usr/lib`下的,也是不会被使用的,结果编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂 computer 蠢猪一个。   除了修改`/etc/ld.so.conf`,还可以在`/etc/ld.so.conf.d`目录下添加`*.conf`文件,然后往该文件添加搜索路径。同样,需要运行 ldconfig 使之生效。