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

Math_Still Lv2

系统头文件路径的查找

一个程序能正确编译、链接、运行需要满足3个条件:预处理时能找到头文件,连接时能找到库,运行时能找到库。下面分别介绍:

在程序中常用两种方法来包含头文件:

1
2
#include <header.h>
#include "header.h"

详细可以点这里源文件包含

头文件查找方式:

  • 搜索当前目录(<>不会搜索当前目录)
  • 搜索-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 进行许可。
 留言
此頁目錄
Linux编译运行时查找头文件和库的规则