include文件存储在哪里-Ubuntu Linux、GCC

include文件存储在哪里-Ubuntu Linux、GCC,linux,gcc,location,include,Linux,Gcc,Location,Include,因此,当我们执行以下操作时: #include <stdio.h> 在我的例子中,编译器GCC知道stdio.h(甚至对象文件)在我的硬盘上的位置。它只是利用文件,没有与我互动 我认为在我的Ubuntu Linux机器上,文件存储在/usr/include/中编译器如何知道在何处查找这些文件?这是可配置的还是只是预期的默认值?我将在哪里查找此配置 既然我问了一个关于这些包含文件的问题,那么这些文件的来源是什么?我知道这在Linux社区中可能很模糊,但是谁来管理这些呢?谁将为Wind

因此,当我们执行以下操作时:

#include <stdio.h>
在我的例子中,编译器GCC知道stdio.h(甚至对象文件)在我的硬盘上的位置。它只是利用文件,没有与我互动

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

既然我问了一个关于这些包含文件的问题,那么这些文件的来源是什么?我知道这在Linux社区中可能很模糊,但是谁来管理这些呢?谁将为Windows编译器提供和管理相同的文件

我一直认为它们是随编译器提供的,但这是一个假设…

请参见此处:

总结:

#include <stdio.h>
当包含文件在引号中时,预处理器首先搜索当前目录,然后搜索由-iNote指定的路径,然后搜索-I路径,然后搜索标准路径

-nostinc可用于阻止预处理器搜索标准路径

也可用于添加搜索路径


编译时,如果使用-v标志,您可以看到使用的搜索路径。

Karl回答了您的搜索路径问题,但就“文件源”而言,需要注意的一点是,如果您安装
libfoo
包并希望对其进行一些开发(即使用其标题),您还需要安装
libfoo-dev
。正如您所看到的,标准库头文件已经在
/usr/include

请注意,一些具有大量头的库会将它们安装到子目录中,例如,
/usr/include/openssl
。要包含其中一个,只需提供不包含
/usr/include
部分的路径,例如:

#include <openssl/aes.h>
#包括
gcc是一个丰富而复杂的“编排”程序,它调用许多其他程序来执行其职责。为了查看您的系统将在哪里搜索
#include“goo”
#include
,我建议:

$ touch a.c
$ gcc -v -E a.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.
# 1 "a.c"
$touch交流电
$gcc-v-E a.c
...
#包括“…”搜索从这里开始:
#包括搜索从这里开始:
/usr/本地/包括
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include
/usr/包括
/系统/库/框架(框架目录)
/库/框架(框架目录)
搜索列表结束。
#1“交流”
这是查看包含文件的搜索列表的一种方法,包括(如果有)目录,
#include“…”
将在其中查找,但
#include
不会在其中查找。我显示的这个特定列表实际上是在Mac OS X(也称为Darwin)上,但我推荐的命令将显示搜索列表(以及有趣的配置详细信息,我在这里用
替换;-)在gcc正常运行的任何系统上。

gcc的
\\35; include
文件存储在
/usr/include
中。
g++的标准include文件存储在
/usr/include/c++

中,您能解释一下在您提供的示例中,从GCC知道在/Library/Frameworks中搜索的位置吗?比如说,在/usr/include和/usr/local/include中搜索是硬编码的,但是其他目录从哪里来?来自环境?
#include <openssl/aes.h>
$ touch a.c
$ gcc -v -E a.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.
# 1 "a.c"