包含文件存储在何处 - Ubuntu Linux, GCC

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

#include <stdio.h>

#include "myFile.h"

编译器(就我而言是 GCC)知道 stdio.h(甚至对象文件)在我硬盘上的位置。它只需利用这些文件,无需我的任何干预。

认为,在我的 Ubuntu Linux 机器上,这些文件存储在 /usr/include/编译器如何知道在哪里查找这些文件?在哪里可以找到这种配置?

既然我问的是关于这些 include 文件的问题,那么这些文件的来源是什么?我知道这在 Linux 社区可能比较模糊,但谁来管理这些文件?谁会为 Windows 编译器提供并管理同样的文件?

我一直以为这些文件是编译器自带的,但这只是一种假设......</del&gt;

解决办法

请参见此处: [搜索路径][1]

摘要

#include 

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

#include "myFile.h"

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

使用 -nostdinc 可以阻止预处理器搜索标准路径。

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

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

评论(0)

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"

这是查看包含文件搜索列表的一种方法,包括(如果有的话)#include "..."会搜索但#include不会搜索的目录。我展示的这个特定列表实际上是在 Mac OS X(又称达尔文)上使用的,但我推荐的命令可以在任何 gcc 运行正常的系统上显示搜索列表(以及我用...替换的有趣的配置细节)。

评论(1)

卡尔已经回答了你关于搜索路径的问题,但关于文件的源代码,需要注意的是,如果你安装了 libfoo 软件包并想对其进行开发(即使用其头文件),你还需要安装 libfoo-dev。正如你所看到的,标准库头文件已经在 /usr/include中了。

请注意,某些头文件较多的库会将它们安装到一个子目录中,例如 /usr/include/openssl。要包含这些库,只需提供不含 /usr/include 部分的路径即可:

#include 
评论(0)