在Unix系统中,gcc在哪里查找头文件?
今天早上我花了一点时间寻找一些系统头文件,所以我认为这将是很好的信息。
在Unix系统中,gcc在哪里查找头文件?
今天早上我花了一点时间寻找一些系统头文件,所以我认为这将是很好的信息。
当前回答
此外,gcc将查找在-I选项后指定的目录。
其他回答
你可以通过查看以下命令查看bash中C程序的(额外的)include路径:
echo $C_INCLUDE_PATH
如果这是空的,它可以被修改为添加默认的包含位置,通过:
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include
g++ -print-search-dirs
gcc -print-search-dirs
GCC手册的CPP章节指出头文件可能位于以下目录中。从搜索路径页面:
GCC在几个不同的地方寻找头文件。在一个普通的Unix系统中,如果你没有指示它,它将在#include中查找请求的头文件:
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
对于c++程序,它也会首先查找/usr/include/g++-v3。
此外,gcc将查找在-I选项后指定的目录。
为了让GCC打印出它将在其中查找系统头文件的完整目录集,像这样调用它:
$ LC_ALL=C gcc -v -E -xc - < /dev/null 2>&1 |
LC_ALL=C sed -ne '/starts here/,/End of/p'
哪个将产生表单的输出
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
如果在命令行上有-I-family选项,它们将影响输出的内容。
(sed命令是为了清除调用打印的所有其他垃圾,LC_ALL=C是为了确保sed命令正常工作——“从这里开始”和“搜索列表结束”短语被翻译为IIRC。)