gcc在哪里查找C和C ++头文件?

时间:2008-12-05 16:02:35

标签: c gcc header

在Unix系统上,gcc在哪里寻找头文件?

今天早上我花了一点时间寻找一些系统头文件,所以我认为这将是很好的信息。

9 个答案:

答案 0 :(得分:203)

`gcc -print-prog-name=cc1plus` -v

此命令询问gcc正在使用哪个 C ++ 预处理器,然后询问它所寻找的预处理器包括。

您将获得有关特定设置的可靠答案。

同样,对于 C 预处理器:

`gcc -print-prog-name=cc1` -v

答案 1 :(得分:34)

此外,gcc将查看-I选项后指定的目录。


答案 2 :(得分:24)

您可以创建一个尝试包含虚假系统标头的文件。 如果在这样的源上以详细模式运行gcc,它将列出所有系统包含的位置,因为它会查找伪造的头。

$ echo "#include <bogus.h> int main(){}" > t.c; gcc -v t.c; rm t.c

[..]

#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i686-apple-darwin9/4.0.1/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.

[..]

t.c:1:32: error: bogus.h: No such file or directory

答案 3 :(得分:17)

CPP SectionGCC Manual表示头文件可能位于以下目录中:

  
    

GCC在几个不同的地方寻找标题。在普通的Unix系统上,如果你不指示它,它将在#include中查找请求的头文件:

  
 /usr/local/include
 libdir/gcc/target/version/include
 /usr/target/include
 /usr/include
  
    

对于C ++程序,它首先会查看/ usr / include / g ++ - v3。

  

答案 4 :(得分:8)

要让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 - 系列选项,则会影响打印出的内容。

sed命令用于清除此调用打印的所有其他垃圾,LC_ALL=C用于确保sed命令有效 - &#34;从这里开始&#34;&#34;搜索列表结束&#34;短语 翻译为IIRC。)

答案 5 :(得分:8)

g++ -print-search-dirs
gcc -print-search-dirs

答案 6 :(得分:3)

命令可以检查编译器查找头文件的路径集: -

cpp -v

如果您声明 #include&#34;&#34; ,则编译器首先在源文件的当前目录中搜索,如果未找到,则继续搜索上面检索的目录。

如果您声明 #include&lt;&gt; ,编译器会直接搜索从上述命令获得的目录。

来源: - http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026

答案 7 :(得分:0)

通过检查以下内容,可以从bash中查看C程序的(附加)包含路径:

echo $C_INCLUDE_PATH

如果这是空的,可以通过以下方式修改它以添加默认包含位置:

export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include

答案 8 :(得分:0)

这些是gcc默认为指定的头文件查找的目录(假设头文件包含在V形符号&lt;&gt;中); 1. / usr / local / include / - 用于第三方头文件。 2. / usr / include / - 用于系统头文件。

如果您决定将自定义头文件放在上述目录以外的位置,可以按如下方式包含它们: 1.使用引号(“./custom_header_files/foo.h”)和文件路径,而不是include语句中的V形符号。 2.编译代码时使用-I开关。 gcc -I / home / user / custom_headers / -c foo.c -p foo.o 基本上-I开关告诉编译器首先查看使用-I开关指定的目录(在检查标准目录之前)。当使用-I开关时,可以使用V形符号包含头文件。