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

标签 c gcc c-preprocessor

我编译了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/

相关文章:

macos - 使用 i386 arch 而非 x86_64 在 OSX 上构建 libFLAC

c++ - GCC 与 Windows SDK?

c - 用于在 C 中连接两个字符串的宏

c# - 通过使用 C# 指令在 ASP.NET MVC 应用程序中启用 "Debug mode"

c - 宏计数参数

c - c语言如何连接两个字符串

c - 使用 C,如何访问与另一个 C 程序相同的内存块?

c++ - 如何手动设置使用哪个版本 'libstdc++.so.6' 而不是使用最新版本?

c - 在 C 中显示数组中的项目

C - 操作文件中的 float