转自:http://hi.baidu.com/ilonng/blog/item/a0232435fbcfb90490ef390d.html/cmtid/68d4ab7bbb8026fb0ad187be

本文介绍在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

[转]Linux C语言头文件搜索路径相关推荐

  1. linux vim配置头文件搜索路径

    linux vim配置头文件搜索路径 根目录下 修改 etc/profile 文件结尾处加 set path=.,/usr/include,,/usr/include/c++/** //**搜索子目录 ...

  2. linux的库文件路径,Linux下的库文件搜索路径

    对于以压缩包发布的软件,在它的目录下通常都有一个配置脚本configure,它的作用确定编译参数(比如头文件位置.连接库位置等),然后生成Makefile以编译程序.可以进入该软件的目录,执行&quo ...

  3. 在linux下面使用Jsoncpp,在编译时添加了头文件搜索路径-Ixxxx/json ,导致很多错误,如下: In file included from /usr/include/x86_64-li

    在linux下面使用Jsoncpp,在编译时添加了头文件搜索路径-Ixxxx/json ,导致很多错误,如下: In file included from /usr/include/x86_64-li ...

  4. arm-linux-gcc 头文件搜索路径,gcc和arm-linux-gcc默认头文件库搜索路径

    参考: GCC ARM-linux-GCC 一.GCC gcc编译时查找头文件,按照以下路径顺序查找: 1. gcc编译时,可以设置-I选项以指定头文件的搜索路径,如果指定多个路径,则按照顺序依次查找 ...

  5. gcc指定头文件搜索路径及动态链接库搜索路径

    一.#include <>与#include "" #include <>直接到系统指定的某些目录中去找某些头文件. #include "&quo ...

  6. Xcode增加头文件搜索路径的方法

    Xcode增加头文件搜索路径的方法 以C++工程为例:在Build Settings 页面中的Search Paths一节就是用来设置头文件路径.相关的配置项用红框框起来了,共有三个配置项: Head ...

  7. 『Linux』默认头文件存储路径/usr/include

    文章目录 /usr/include 引用 完 /usr/include linux系统编程往往需要引用c头文件,linux下,头文件一般存储到/usr/include 例如最常见的几个头文件: 又比如 ...

  8. Linux下的库文件搜索路径

    对于以压缩包发布的软件,在它的目录下通常都有一个配置脚本configure,它的作用确定编译参数(比如头文件位置.连接库位置等),然后生成Makefile以编译程序.可以进入该软件的目录,执行&quo ...

  9. 【C++】细说C语言头文件的路径

    使用尖括号< >,编译器会到系统路径下查找头文件:而使用双引号" ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找.也就是说,使用双引号比使用尖括 ...

最新文章

  1. Linux下为什么ls直接就可以运行,而你的程序要写./dir1/dir2/bin/bwa才可以
  2. 在MasterPage下FindControl的使用方法
  3. Golang init函数执行顺序
  4. Mat, vectorpoint2f,Point3d Iplimage等等常见类型转换
  5. PHP实现多服务器session共享之NFS共享
  6. python中grid函数_python tkinter中的grid布局是什么?
  7. spring boot框架学习2-spring boot核心(1)
  8. hibernate使用sql语句查询实体时,要写上addEntity
  9. 各种格式ANSI,UTF8,Unicode,Unicode BigEndian的解释
  10. var that =this的用法详解
  11. Excel 转置分组时如何保留没有对应数据的空组
  12. 关于游戏手柄按键的设计
  13. Premiere Pro Guru: Online Offline Workflows Premiere Pro 大师教程之在线与离线工作流 Lynda课程中文字幕
  14. 利用wxpython库来制作真心话大冒险小程序
  15. 蓝牙读写卡器_蓝牙卡复制方法
  16. 手把手教你开发第一个HarmonyOS (鸿蒙)移动应用
  17. 傲梅分区助手v8.1.0 企业单文件免费版
  18. Win10系统下安装和配置MathType7
  19. Linux之文件打包和解压缩
  20. HashCode和HashMap

热门文章

  1. ORM多表查询——关联查询
  2. optee中关于异常向量表、中断等的深入思考
  3. linux kernel的spinlock代码导读和分析
  4. 怎么用c语言画出坐标曲线,c语言打印贝塞尔曲线坐标(三阶)
  5. GIVE_A_TRY.exe 逆向(NCK逆向初级第9,10,11课作业)
  6. 驱动和应用层通信列子
  7. 16.PAE分页实验
  8. HTML导航页面结构
  9. 同网段不同网段主机间通信原理
  10. CPU检测工具CPU-Z