gcc 查看 引用头文件的位置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gcc 查看 引用头文件的位置相关的知识,希望对你有一定的参考价值。
场景:
代码 使用了 msgpack库,但makefile 没有指定 msgpack的头文件所在位置,也可以编译通过。
可以得出 一定是在系统的某个位置 安装了 msgpack,并且被找到。
但具体头文件在哪个位置呢?
从网上 搜到 看到 都是 gcc/g++ 头文件的 搜索路径,-I指定头文件的搜索路径。 知道了搜索路径,那我 需要 遍历 搜索路径上的每个目录 去查找, 这样比较费时, 但也是最容易想到的。
但可以通过 gcc 编译程序的 过程,让 gcc 自己列出所在位置.
gcc 由源码到可执行二进制程序包含了:预处理,编译,汇编,链接,四个阶段;其对应gcc -E -S -c ,链接阶段没有特殊参数表示。
先说下gcc -o,这里o代表 output,即指定输出文件。
1.预处理阶段:gcc -E test.c -o test.i,
-E参数指定处理到预处理阶段停止,并输出预处理结果,这里指定输出文件-o 是因为指定的话会直接输出到标准输出,
2.编译阶段:gcc -S test.i -o test.s
这个阶段会把test.s 编译成 汇编代码
3.汇编阶段:gcc -c test.s test.o
这个阶段,把汇编代码,汇编成 二进制代码
4.链接阶段:gcc test.o -o test
和其他库一起 链接生成 可执行文件 test
可以利用预处理阶段 找到 xx.h
make, 让makefile 生成 gcc 指令,因为可能包含了其他的 库 头文件,
gcc -E test.c |grep xx.h
以上是关于gcc 查看 引用头文件的位置的主要内容,如果未能解决你的问题,请参考以下文章
急!LINUX下,GCC编译,原程序包含<semaphore.h>头文件,为啥编译时说sem_wait,sem_post等未定义的引用