C语言 为什么有这么多包含目录?

0mkxixxg  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(150)

在我的Ubuntu环境(20.04,arm64)上,我发现不止一个包含目录。当我执行以下命令时,我有4个gcc知道的包含目录。

  • 命令
LC_ALL=C gcc -v -xc -E /dev/null 2>&1 | sed -ne '/search starts here/,/End of search list/p'
  • 结果
#include "..." search starts here:
#include <...> search starts here:
  /usr/lib/gcc/aarch64-linux-gnu/9/include
  /usr/local/include
  /usr/include/aarch64-linux-gnu
  /usr/include
End of search list.

我看不出它们之间有什么不同,你能解释一下吗?

nhhxz33t

nhhxz33t1#

  • /usr/include是从包管理器安装的系统头文件的标准位置。
  • /usr/local/include是你自己安装的软件包中安装的系统头文件的位置。由于订购的原因,在这里安装的任何东西都会覆盖/usr/include中的那些文件,但可以保证没有系统软件包会与这些文件冲突(因为系统软件包不会修改/usr/local)。
  • /usr/include/aarch64-linux-gnu将包含特定于ARM 64的报头;这很方便,因为您的系统可能安装了一个交叉编译器,该编译器将具有除此之外的某些体系结构的头文件。
  • /usr/lib/gcc/aarch64-linux-gnu/9/include是专门用于ARM 64上GCC版本9编译器的头文件,这些头文件将包含编译器所需的独立头文件以及对编译器内部的支持。您可以在我的机器上安装几个编译器-我自己已经安装了GCC 9,11和12,并排安装。

C11指定的独立式头是<float.h><iso646.h><limits.h><stdalign.h><stdarg.h><stdbool.h><stddef.h><stdint.h><stdnoreturn.h>
请注意,这些列表中的路径 * 仅 * 在对应目录存在时才存在。例如,我自己没有/usr/local/include目录,因此它从我的列表中删除。在完整的输出中有一个以ignoring nonexistent directory为前缀的列表。

相关问题