Linux编译运行时查找头文件和库的规则

系统头文件路径的查找
一个程序能正确编译、链接、运行需要满足3个条件:预处理时能找到头文件,连接时能找到库,运行时能找到库。下面分别介绍:
在程序中常用两种方法来包含头文件:
1 |
详细可以点这里源文件包含
头文件查找方式:
- 搜索当前目录(<>不会搜索当前目录)
- 搜索
-I
指定的目录 - 找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
- 找库目录:
/usr/include
,/usr/local/include
- 找gcc的一系列自带目录,如:
CPLUS_INCLUDE_PATH=/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include
库文件路径的查找
- gcc会去找
-L
指定的目录 - 找gcc的环境变量
LIBRARY_PATH
- 找库目录
/lib和/lib64
,/usr/lib 和/usr/lib64
,/usr/local/lib和/usr/local/lib64
gcc编译时只会查找相应的头文件,而不会进行连接。只要include设置完全,就可以编译通过。所以就会经常发生编译可以通过,但运行时却无法找到相关类或者函数的实现。
运行时库文件动态库路径的查找
- 编译目标代码时指定的动态库搜索路径;这是通过gcc的参数
-Wl,-rpath=
指定。当指定多个动态库搜索路径时,路径之间用冒号:
分隔 - 环境变量
LD_LIBRARY_PATH
指定的动态库搜索路径 - 配置文件
/etc/ld.so.conf
中指定的动态库搜索路径 - 默认的动态库搜索路径
/lib
,/usr/lib
- 標題: Linux编译运行时查找头文件和库的规则
- 作者: Math_Still
- 撰寫于: 2024-01-27 20:05:34
- 更新于: 2024-01-27 20:26:17
- 連結: https://math-still.github.io/2024/01/27/findhead-lib/
- 版權宣告: 本作品采用 CC BY-NC-SA 4.0 进行许可。
留言