在我的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.
我看不出它们之间有什么不同,你能解释一下吗?
1条答案
按热度按时间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
为前缀的列表。