如何指定gcc的默认头文件路径

发表于:2009-12-16 10:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  LC_MESSAGES 该环境变量指出编译程序使用何种语言发出诊断消息。对 Australian English ,可设置为 en_AU ; 对 MexicanSpanish ,可设置为 es_MX 。如果变量没有设置,使用 LANG 变量的默认值,或如果没有设置 LANG ,那就使用 C 英语行为。也见 LC_ALL 。

  LD_LIBRARY_PATH 该环境变量不会影响编译程序,但程序运行的时候会有影响。变量指定一个目录列表,程序会查找该列表定位共享库。只有当未在编译程序的目录中找到共享库的时候,执行程序必须设置该变量。

  LD_RUN_PATH 该环境变量不会影响编译程序,但程序运行的时候会有影响。该变量在运行时指出文件的名字,运行的程序可由此得到它的符号名字和地址。地址不会重新载入,因而可能符号引用其他文件中的绝对地址。这和 ld 工具使用 -R 选项完全一样。

  LIBRARY_PATH

  该环境变量可设置为一个或多个目录名字列表,连接程序会搜寻该目录,以查找特殊连接程序文件,和由 -l (字母 l )命令行选项指定名字的库。 由 -L 命令行选项指定的目录在环境变量的前面,首先被查找。

  ==> 也见 COMPILER_PATH 。

  OBJC_INCLUDE_PATH

  在编译 Objective-C 程序的时候使用该环境变量。一个或多个目录名的列表由环境变量指定,用来查找头文件,就好像在命令行中指定 -isystem 选项一样。所有由 -isystem 选项指定的目录会首先被查找。

  ==> 也见 CPATH 、 CPLUS_INCLUDE_PATH 和 C_INCLUDE_PATH 。

  SUNPRO_OUTPUT

  为文件名设置该环境变量会令预处理程序将基于依赖关系的 makefile 规则写入文件。会包含系统头文件名。 如果环境变量被设置为单个名字,它将会被当作文件名,依赖关系规则中的名字将由源文件的名字中获得。如果定义中有两个名字,第二个名字就是依赖关系规则中的目标名。 设置该环境变量的结果与在命令行中使用参数 -M 、 -MF 和 -MT 的效果一样。

  ==> 参见 DEPENDENCIES_OUTPUT 。

  TMPDIR

  这个变量包含了供编译程序存放临时工作文件的目录的路径名。这些文件通常在编译过程结束时被删除。这种文件的一个例子就是由预处理程序输出并输入给编译程序的文件。

  linux 默认的 include 在哪 ?

  #include <linux/module.h> 中的 module.h 默认是在哪个目录下呢?我在 /usr/include/linux 下并没有找到这个文件。

  另外想问一下,不同内核版本的 linux 头文件是不是一样的。比如:我在 2.6.20 内核的系统上,用 2.6.10 的头文件会不会有问题。

  网友回复 :

  我的 module.h 是在 内核编译好了的目录下的,不是在 /usr/include/linux 下,在 2.6.20 内核的系统上,用 2.6.10 的头文件应该会有问题,内核的头文件和 当前系统运行的内核不一致。

  网友回复 : 你引用的是内核下的头文件 .

  不在 /usr/include 下 .

  在 : /usr/src/kernels/2.6.18-8.el5-x86_64/include/linux/module.h 下面 ... 中间的版本号是不一样的 ... 你选你的就行了 ..

  网友回复 : 请问楼上为什么是在 /usr/src/kernels/2.6.18-8.el5-x86_64/include/linux/module.h 呢?我查了一下环境变量,没有看到关于头文件的环境变量。 gcc 是如何知道头文件的位置的?

  网友回复 : 这个问题很好你需要看看 linux kernel 的 Makefile 文件了。在什么地方找头文件,它说了算。:)

  网友回复 : 你的程序是驱动之类的内核层的吧?

  它调用的头文件就应该是内核源码里面的 include 了。一般的系统都把内核源码放在 /usr/src 下面,假如是自己编译的内核的话,也可以放在别处的。 至于 gcc 到哪里去找头文件,就看 makefile 了,或者直接用 gcc 命令的话,要加上 -I 来指定目录。

  网友回复 : 楼上,可是我的 makefile 里没有指定 include 呀, gcc 是怎么找到头文件的?

  网友回复 :gcc 是怎么找到头文件的?

  ================================

  回答了这个问题, LZ 就明白了一切了, GCC 找头文件有三种策略:

  1. 会在默认情况下指定到 /usr/include 文件夹 ( 更深层次的是一个相对路径, GCC 可执行程序的路径是 /usr/bin ,那么它在实际工作时指定头文件头径是一种相对路径方法,换算成绝对路径就是 /usr/include)

  2.GCC 还使用了 -I 指定路径的方式,这一点大家都知道

  3. 还可以使用一个参数来指示 GCC 不搜索系统默认路径,这个参数我忘了,你搜一下就知道了

  在编译驱动模块时,由于非凡的需求必须强制 GCC 不搜索系统默认路径,也就是不搜索 /usr/include ,要自己用 -I 参数来指定内核头文件路径,这个时候必须在 Makefile 中指定两个参数,一个是内核头文件路径,一个是强制 GCC 不搜索系统默认路径。在编译内核时,必须使用一个参数 ( 强制 GCC 不搜索系统默认路径 ) ,否则就会引起混乱。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号