包含文件存储在哪里 – Ubuntu Linux,GCC

所以,当我们做到以下几点:

#include <stdio.h> 

 #include "myFile.h" 

在我的情况下,编译器GCC知道stdio.h(甚至是目标文件)在硬盘上的位置。 它只是利用我没有互动的文件。

认为在我的Ubuntu Linux机器上,这些文件存储在/usr/include/编译器如何知道在哪里查找这些文件? 这是可configuration的还是这只是预期的默认? 我在哪里寻找这个configuration?

由于我对这些包含文件提出了一个问题,文件的来源是什么? 我知道在Linux社区这可能是模糊的,但谁来pipe理这些? 谁会为Windows编译器提供和pipe理相同的文件。

我总是觉得他们带编译器的,但这是一个假设…

看到这里: searchpath

概要:

 #include <stdio.h> 

当包含文件在括号中时,预处理器首先在通过-I标志指定的path中search。 然后它search标准的包含path(请参阅上面的链接,并使用-v标志在您的系统上进行testing)。

 #include "myFile.h" 

当包含文件被引用时,预处理器首先在当前目录中search,然后通过-iquote指定path,然后是-Ipath,然后是标准path。

-nostdinc可以用来防止预处理器根本search标准path。

环境variables也可以用来添加searchpath。

如果使用-v标志进行编译,则可以看到使用的searchpath。

海湾合作委员会是一个丰富而复杂的“编排”计划,呼吁许多其他计划履行其职责。 为了查看#include "goo"#include <zap>将在您的系统上进行search的具体目的,我build议:

 $ touch ac $ gcc -v -E ac ... #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. # 1 "ac" 

这是查看包含文件的search列表的一种方法,包括(如果有的话) #include "..."将显示的目录,但是#include <...>不会显示。 我显示的这个特定的列表实际上是在Mac OS X(又名达尔文)上,但是我推荐的命令会显示search列表(以及我replace的有趣的configuration细节...在这里;-)任何gcc运行正常的系统。

Karl回答了你的searchpath问题,但是就“文件的来源”而言,有一点需要注意的是,如果你安装了libfoo包并且想用它做一些开发(即使用它的头文件) ,你还需要安装libfoo-dev 。 正如你所看到的,标准的库头文件已经在/usr/include

请注意,一些头文件很多的库会将它们安装到一个子目录,例如/usr/include/openssl 。 要包含其中之一,只需提供没有/usr/include部分的path,例如:

 #include <openssl/aes.h> 

gcc的\#include文件存储在/usr/include 。 g ++的标准包含文件存储在/usr/include/c++