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

时间:2009-08-02 01:26:50

标签: linux gcc location include

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

#include <stdio.h>

#include "myFile.h"

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

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

因为我问这些包含文件的问题,文件的来源是什么?我知道在Linux社区中这可能是模糊的,但谁管理这些?谁将为Windows编译器提供和管理相同的文件。

我总是认为他们使用编译器,但这是一个假设......

4 个答案:

答案 0 :(得分:44)

见这里:Search Path

要点:

#include <stdio.h>

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

#include "myFile.h"

当包含文件在引号中时,预处理程序首先在当前目录中搜索,然后在 -iquote ,然后是 -I 路径,然后是标准路径中指定路径。

-nostdinc 可用于防止预处理器完全搜索标准路径。

Environment variables也可用于添加搜索路径。

如果使用 -v 标记进行编译,则可以看到使用的搜索路径。

答案 1 :(得分:43)

gcc是一个丰富而复杂的“编排”程序,它可以调用许多其他程序来执行其职责。为了查看#include "goo"#include <zap>将在您的系统中搜索的具体目的,我建议:

$ 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"

这是查看包含文件的搜索列表的一种方法,包括#include "..."将看到但#include <...>不会看到的(如果有)目录。我正在展示的这个特定列表实际上是在Mac OS X(又名Darwin)上,但我推荐的命令会显示搜索列表(以及我在这里用...替换的有趣配置详细信息;-)在gcc正常运行的任何系统上。

答案 2 :(得分:10)

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

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

#include <openssl/aes.h>

答案 3 :(得分:2)

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