包含文件存储在哪里 – 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++
。