在C语言编译过程中,编译器在寻找动态链接库(通常具有.so
扩展名)时,会遵循一定的搜索路径。这些路径包括系统默认库位置、环境变量指定的路径以及通过配置文件或命令行参数指定的路径。以下是详细的搜索路径和说明:
- 系统默认库位置:
- 对于32位程序,系统默认会在
/lib
和/usr/lib
目录中查找动态链接库。 - 对于64位程序,系统默认会在
/lib64
和/usr/lib64
目录中查找动态链接库。
- 对于32位程序,系统默认会在
- 环境变量指定的路径:
LD_LIBRARY_PATH
环境变量用于指定额外的动态链接库搜索路径。编译器和运行时系统都会查看这个环境变量中列出的目录。LIBRARY_PATH
环境变量通常用于指定静态链接库的搜索路径,但在某些情况下也可能影响动态链接库的搜索。
- 配置文件指定的路径:
/etc/ld.so.conf
文件及其包含的目录(通常在/etc/ld.so.conf.d/
下)中的.conf
文件,可以指定额外的动态链接库搜索路径。- 修改这些配置文件后,需要运行
ldconfig
命令来更新动态链接库的缓存文件/etc/ld.so.cache
。
- 命令行参数指定的路径:
- 在编译时,可以使用
-L
参数来指定额外的库文件搜索路径。这些路径会被优先搜索。 - 在运行时,可以使用
-Wl,-rpath
参数来指定运行时库文件的搜索路径。
- 在编译时,可以使用
总结:
- C语言编译时寻找动态链接库的路径主要包括系统默认库位置、环境变量指定的路径、配置文件指定的路径以及命令行参数指定的路径。
- 系统默认库位置是根据程序的位数(32位或64位)来确定的。
LD_LIBRARY_PATH
和LIBRARY_PATH
环境变量可以影响编译时和运行时的库文件搜索。/etc/ld.so.conf
及其相关配置文件和ldconfig
命令用于配置和管理动态链接库的搜索路径。-L
和-Wl,-rpath
等命令行参数可以在编译时和运行时显式指定库文件的搜索路径。