博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gcc搜索头文件路径
阅读量:6964 次
发布时间:2019-06-27

本文共 1992 字,大约阅读时间需要 6 分钟。

C和C++中include 搜索路径的一般形式以及gcc搜索头文件的路径

注:-I 指定的目录,在使用尖括号引用时,是先于标准头文件目录被搜索的。例如使用了 -I./,且当前目录下有一个 stdio.h,那么在 #include <stdio.h>时,所引用的是当前目录下的stdio.h,而不是系统自带的标准头文件。
C和C++中include 搜索路径的一般形式
对于include 搜索的路径:
  C中可以通过 #include <stdio.h> 和 #include "stidio.h" ,区别是:
  在UNIX系统中,尖括号告诉编译器在一个或者多个标准系统目录中找到文件 /usr/include /usr/local/include;即系统头文件所在的目录。
  看看这些文件夹下是否有该头文件;如果没有,也不会检索当前文件所在路径,并将报错。
  使用双引号,编译器先到当前目录查找头文件或文件名中指定的其他目录,如果没找到在到标准系统目录查找。
  即,首先搜索本地目录,但是具体哪个目录依赖于编译器。有些编译器搜索源代码所在目录,有些则搜索当前目录,还有些搜索工程文件所在目录。当出现此类问题时,我们最好注意自己所用的编译器是如何操作的。在下面说明了gcc是如何操作的。
  同时,include也可以采用相对路径。比如,a.c需要/usr/local/include/Tleap/leap.h,而/usr/local/include是系统的默认搜索路径,所以在a.c中可以用相对路径包含,
  #include<Tleap/leap.h>。
  对于系统头文件,很多IDE具有标准搜索路径,IDE提供菜单选项用于指定使用尖括号时搜索的路径。
  查看GCC的搜索目录:(gcc --help)
  查看编译c++文件使用的头文件目录的命令为:`gcc -print-prog-name=cc1plus` -v
  查看编译c文件的头文件搜索目录的命令为 `gcc -print-prog-name=cc1` -v
gcc寻找头文件的路径:
  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 ,然后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 就是包含文件/usr/include/sys/types.h
 
注:-I 指定的目录,在使用尖括号引用时,是先于标准头文件目录被搜索的。例如使用了 -I./,且当前目录下有一个 stdio.h,那么在 #include <stdio.h>时,所引用的是当前目录下的stdio.h,而不是系统自带的标准头文件。

转载于:https://www.cnblogs.com/elseliving/p/7528853.html

你可能感兴趣的文章
Rot13加密算法
查看>>
CentOS7.2 安装Docker
查看>>
windows下如何正确使用Jconsole远程连接linux主机上的JVM
查看>>
jquery通过val()取不到textarea中的值
查看>>
Tutorial: Build a Spring WebMVC App with Primefaces
查看>>
mongooseim xmpp 服务器docker 安装试用
查看>>
git(码云):如何把本地代码提交到码云代码管理项目上
查看>>
linux tomcat 绑定域名
查看>>
【kudu pk parquet】TPC-H Query2对比解析
查看>>
RabbitMQ ——“Hello World”
查看>>
oracle 12c多租户下的日常操作变化
查看>>
【VBA】点击工作簿中的每个单元格,整行整列变色
查看>>
php-cgi和php-fpm,Windows环境下解决Nginx+php并发访问阻塞问题。
查看>>
Darwin Streaming Server服务器mp4文件点播返回”415 Unsupported Media Type“错误
查看>>
Mac的brew和brew cask区别以及安装brew cask
查看>>
SpringBoot入门(二)——起步依赖
查看>>
69. x 的平方根
查看>>
第二课 --- git的(管理修改和撤销修改、删除文件)
查看>>
C#自动实现Dll(OCX)控件注册的两种方法
查看>>
写在开始
查看>>