本文介绍Linux中头文件的搜索路径,即Linux下的gcc编译器如何找到指定的头文件。 在此之前,我们先了解一个基本概念。
头文件是一个文本文件。 使用文本编辑器编写代码后,只需使用扩展名 .h 保存即可。 头文件一般包含一些重用的代码,如函数声明、变量声明、常量定义、宏定义等。使用#语句引用头文件时,相当于将头文件中的所有内容复制到#中。 #有两种写法,分别是:
#:直接到系统指定的某些目录下查找某些头文件。
# "":先去源文件所在的文件夹,然后去系统指定的一些目录下找一些头文件。
#该文件可能会带来重复申请的问题。 例如ah引用的函数是某个实现,而bh引用的函数是另一个实现,那么编译时就会出错。 因此,为了避免重复引用而导致编译错误,头文件中往往有:
#标签
#标签
//代码部分
#万一
格式。 LABEL是唯一的标签,命名规则与变量相同。 它通常根据它所在的头文件的名称来命名。 例如,如果头文件的文件名为.h,则可以这样使用:
#
#
//代码部分
#万一
这意味着如果没有定义,则定义它并编译以下代码部分,直到遇到#endif。 这样,当重复引用时,由于已经定义了,后面的代码部分就不会被编译,从而避免了重复定义。
总而言之,头文件实际上只是将一些常用的命令集成到了里面。 您可以只加载您想要使用的头文件。
gcc搜索头文件的路径(顺序为1->2->3)
1、gcc编译源文件时,通过参数-I指定头文件的搜索路径。 如果指定的路径有多个路径,则按照指定路径的顺序查找头文件。 命令形式为:“gcc -I /path/where//in .c”。 这里源文件的路径可以是绝对路径,也可以是相对路径。 例如:
假设当前路径为/root/test,如果.c想要包含头文件“/.h”,有两种方法:
1) .c 中的 # "/.h" 或 # "/root/test//.h",然后 gcc .c
2).c中的#或#,则也可以使用gcc –I .c
2.通过查找gcc环境变量//来搜索头文件位置。
3.然后在默认目录中搜索,分别是:
/usr/
/usr/本地/
/usr/lib/gcc-lib/i386-linux/2.95.2/
最后一行是gcc程序的库文件地址,在每个用户的系统上可能不同。
默认情况下,gcc会指定/usr/文件夹来搜索头文件。
gcc还有另一个参数:-,它使编译器不再在系统默认的头文件目录中搜索头文件。 一般与-I配合使用,明确限制头文件的位置。 编译驱动模块时,由于特殊需要,必须强制GCC不搜索系统默认路径,即不搜索/usr/,必须使用参数-,并且必须使用-I参数指定内核头文件路径。 这个时候就必须指定了。
4、#using相对路径时,gcc最终会根据上述路径构建头文件的位置。 例如#是包含文件/usr//sys/types.h