为什么stddef.h不在/ usr/include中?

Ren*_*ger 6 c gcc c-preprocessor

我编译了gnu标准库并将其安装在$GLIBC_INST.

现在,我尝试编译一个非常简单的程序(只使用一个#include :) #include <stdio.h>:

gcc --nostdinc -I$GLIBC_INST/include foo.c
Run Code Online (Sandbox Code Playgroud)

编译(预处理器?)告诉我,它没有找到stddef.h.

事实上,没有$GLIBC_INST/include(也没有/usr/include).然而,我发现了一个stddef.h/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include.

为什么那个文件不在/usr/include?我认为它属于标准的c库,应该安装在$GLIBC_INST/include.

我怎么能用foo.c新安装的标准库编译我的标准库stddef.h

编辑:澄清

我觉得这个问题的标题不是最优的.正如一些答案所指出的那样,没有要求stddef.h进入/usr/include(或$GLIBC_INST/include就此而言).我明白这一点.

但是我想知道当我想要使用时如何继续$GLIBC_INST.我似乎很明显(虽然我可能在这里错了)我需要调用gcc --nostdinc以便不使用系统安装的头文件.这需要我使用-I$GLIB_INST/include.这对我来说很清楚.

然而,我还不清楚的是:当我还添加时,我-I/usr/lib/gcc/x86..../include怎么能确定我确实拥有新编译的glibc的最新头文件?

flu*_*ter 7

这是因为文件下面/usr/include是由C库提供的公共头glibc文件,而文件/usr/lib/gcc是特定于该特定编译器的文件.通常每个编译器都有自己不同的实现stddef.h,但是stdio.h当链接到已安装的C库时,它们将使用相同的实现.

  • 我可能会补充说 `gcc --print-file-name=include` 打印到 `stddef.h` 的路径。 (4认同)