我编译了gnu标准库并安装在$GLIBC_INST
中.
现在,我尝试编译一个非常简单的程序(只使用一个#include : #include <stdio.h>
):
gcc --nostdinc -I$GLIBC_INST/include foo.c
编译(预处理器?)告诉我,它没有找到 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
时如何继续.对我来说很明显(虽然我在这里可能是错的)我需要用 --nostdinc
调用 gcc为了不使用系统安装的头文件。
这意味着我使用 -I$GLIB_INST/include
.这对我来说很清楚。
然而,我仍然不清楚的是:当我还添加 -I/usr/lib/gcc/x86..../include
时,我如何确定我确实拥有新编译的 glibc 的最新头文件?
最佳答案
这是因为/usr/include
下的文件是C库提供的通用头文件,例如glibc
,而/usr/下的文件lib/gcc
特定于该特定编译器。每个编译器都有自己不同的 stddef.h
实现是很常见的,但是当链接到已安装的 C 库时,它们将使用相同的 stdio.h
。
关于c - 为什么stddef.h 不在/usr/include 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37158651/