现在的位置: 首页 > 综合 > 正文

揪出你找不到的系统头文件

2013年05月19日 ⁄ 综合 ⁄ 共 1016字 ⁄ 字号 评论关闭

程序是驱动之类的内核层,调用的头文件就应该是内核源码里面的include了


gcc是怎么找到头文件的?
================================
GCC找头文件有三种策略:
1.会在默认情况下指定到/usr/include文件夹(更深层次的是一个相对路径,GCC可执行程序的路径是/usr/bin,那么它在实际工作时指定头文件头径是一种相对路径方法,换算成绝对路径就是/usr/include)
2.GCC还使用了-I指定路径的方式,这一点大家都知道
3.还可以使用一个参数来指示GCC不搜索系统默认路径,这个参数我忘了,你搜一下就知道了


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


以上为摘抄:


我的问题是这样的:在学程序时碰到stdbool.h
这个头文件,去找它,发现#whereis stdbool.h 竟然找不到,草,这部可能,因为程序是正常编译的,那么这个头文件就哟定存在,在搜索的过程中找到:C99新增的_Bool类型,包含该头文件后,可用bool代替_Bool,true代替1,false代替0。这样可以更好的与C++兼容。

可我还是找不到我自己系统上stdbool.h的头文件的位置呀,考,那就新想个办法:有GCC+VI

gcc 中有个选项项 -E

-E
  只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.
  例子用法:
  gcc -E hello.c > pianoapan.txt
  gcc -E hello.c | more
  慢慢看吧,一个hello word 也要与处理成800行的代码

这样就咱就预处理一个:

然后查看文件:这是别想着用眼一行一行找,咱有VI:

ESC->/stdbool.h->enter

这样就找到啦,在预编译时的stdbool.h

"raise.c" 2
2056 # 1 "/usr/lib/gcc/i686-linux-gnu/4.4.5/include/stdbool.h" 1 3 4
2057 # 5 "raise.c" 2
2058 # 1 "/usr/include/signal.h" 1 3 4
草,都在两千多行啦,幸好没有用眼找,:呵呵;


抱歉!评论已关闭.