gcc include
本文介绍在linux中头文件的搜索路径,也就是说你通过include指定的头文件,linux下的gcc编译器它是怎么找到它的呢。在此之前,先了解一个基本概念。
头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明、变量声明、常数定义、宏的定义等等。当使用#include语句将头文件引用时,相当于将头文件中所有内容,复制到#include处。#include有两种写法形式,分别是:
#include <> : 直接到指定的某些目录中去找某些头文件。
#include “” : 先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件。
#include文件可能会带来一个问题就是重复应用,如a.h引用的一个函数是某种实现,而b.h引用的这个函数却是另外一种实现,这样在编译的时候将会出现错误。所以,为了避免因为重复引用而导致的编译错误,头文件常具有:
#ifndef label
#define label
//代码部分
#endif
的格式。其中label为一个唯一的标号,命名规则跟变量的命名规则一样。常根据它所在的头文件名来命名,例如,如果头文件的文件名叫做hardware.h,那么可以这样使用:
#ifndef __hardware_h__
#define __hardware_h__
//代码部分
#endif
这样写的意思就是,如果没有定义__hardware_h__,则定义__hardware_h__,并编译下面的代码部分,直到遇到#endif。这样当重复引用时,由于__hardware_h__已经被定义,则下面的代码部分就不会被编译了,这样就避免了重复定义。
一句话,头文件事实上只是把一些常用的命令集成在里面,你要用到哪方面的命令就载入哪个头文件就可以了。
gcc寻找头文件的路径(按照1->2->3的顺序)
1. 在gcc编译源文件的时候,通过参数-i指定头文件的搜索路径,如果指定路径有多个路径时,则按照指定路径的顺序搜索头文件。命令形式如:“gcc -i /path/where/theheadfile/in sourcefile.c“,这里源文件的路径可以是绝对路径,也可以是相对路径。eg:
设当前路径为/root/test,include_test.c如果要包含头文件“include/include_test.h“,有两种方法:
1) include_test.c中#include “include/include_test.h”或者#include "/root/test/include/include_test.h",然后gcc include_test.c即可
2) include_test.c中#include <include_test.h>或者#include <include_test.h>,然后gcc –i include include_test.c也可
2. 通过查找gcc的环境变量c_include_path/cplus_include_path/objc_include_path来搜索头文件位置。
3. 再找内定目录搜索,分别是
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
最后一行是gcc程序的库文件地址,各个用户的系统上可能不一样。
gcc在默认情况下,都会指定到/usr/include文件夹寻找头文件。
gcc还有一个参数:-nostdinc,它使编译器不再系统缺省的头文件目录里面找头文件,一般和-i联合使用,明确限定头文件的位置。在编译驱动模块时,由于非凡的需求必须强制gcc不搜索系统默认路径,也就是不搜索/usr/include要用参数-nostdinc,还要自己用-i参数来指定内核头文件路径,这个时候必须在makefile中指定。
4. 当#include使用相对路径的时候,gcc最终会根据上面这些路径,来最终构建出头文件的位置。如#include <sys/types.h>就是包含文件/usr/include/sys/types.h
摘自 zhaoguoxian12345的专栏
上一篇: CIO如何防范移动和云计算带来的风险
下一篇: 云计算的重要性正被市场接受
推荐阅读
-
gcc 动态编译
-
简单谈谈PHP中的include、include_once、require以及require_once语句,requireonceinclude
-
PHP中include函数和require函数的区别
-
PHP3 入门教程INCLUDE 语句
-
什么情况上,可以不用require或include就可以直接引用类?
-
PHP中include()与require()的区别说明_PHP
-
php include()字符串,并解析字符串的问题
-
把include放入函数里则包孕的变量不可调用
-
include一个php文件,经常会失败,请教需要注意些什么
-
求教一个include_once路径有关问题