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


  1. make, 让makefile 生成  gcc 指令,因为可能包含了其他的 库 头文件,

  2. gcc -E test.c |grep xx.h

以上是关于gcc 查看 引用头文件的位置的主要内容,如果未能解决你的问题,请参考以下文章

gcc 编译引用头文件

如何让linux-gcc找到自定义的头文件

[VScode]关于找不到头文件的解决

急!LINUX下,GCC编译,原程序包含<semaphore.h>头文件,为啥编译时说sem_wait,sem_post等未定义的引用

如何解决gcc编译c程序找不到头文件的问题

怎么在linux环境变量中设置多个gcc头文件搜索路径?