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

Fra*_*k V 69 linux gcc location include

所以,当我们做以下事情时:

#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)

#include "myFile.h"
Run Code Online (Sandbox Code Playgroud)

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

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

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

我一直认为他们的印象与编译器,但是这是一个假设...

Kar*_*and 47

请参阅此处: 搜索路径

摘要:

#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)

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

#include "myFile.h"
Run Code Online (Sandbox Code Playgroud)

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

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

环境变量也可用于添加搜索路径.

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


Ale*_*lli 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"
Run Code Online (Sandbox Code Playgroud)

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

  • 你能解释一下GCC知道在你提供的例子中搜索/ Library/Frameworks吗?比如,在/ usr/include和/ usr/local/include中进行搜索是硬编码的,但其他目录来自哪里?来自环境? (4认同)

Mer*_*son 10

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

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

#include <openssl/aes.h>
Run Code Online (Sandbox Code Playgroud)


小智 6

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