gcc编译器在编译时查找头文件在哪里?

时间:2012-10-10 05:30:06

标签: c unix

我在使用gcc编译C文件时遇到错误 - 由于没有为dce / rpc.h找到这样的文件/目录,因此给出了错误。我应该在哪里寻找它?

3 个答案:

答案 0 :(得分:6)

此命令打印包含路径:

gcc -xc -v -

在我的linux框中,结果如下:

#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/i586-redhat-linux/4.4.1/include
 /usr/include
End of search list.

使用交叉gcc时,路径可能非常难以判断:

#include <...> search starts here:
 /opt/OSELAS.Toolchain-2011.11.0/arm-v5te-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/lib/gcc/arm-v5te-linux-gnueabi/4.6.2/include
 /opt/OSELAS.Toolchain-2011.11.0/arm-v5te-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/lib/gcc/arm-v5te-linux-gnueabi/4.6.2/include-fixed
 /opt/OSELAS.Toolchain-2011.11.0/arm-v5te-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/lib/gcc/arm-v5te-linux-gnueabi/4.6.2/../../../../arm-v5te-linux-gnueabi/include
 /opt/OSELAS.Toolchain-2011.11.0/arm-v5te-linux-gnueabi/gcc-4.6.2-glibc-2.14.1-binutils-2.21.1a-kernel-2.6.39-sanitized/sysroot-arm-v5te-linux-gnueabi/usr/include
End of search list

所以不要试图去问find它,你可能会走错路。

答案 1 :(得分:3)

通过使用-v选项运行预处理器(cpp),您可以找出gcc默认搜索包含文件的目录。您还应指定您感兴趣的语言,除非它是C语言,因为每种语言都有自己的搜索路径。

以下是一个例子:

cpp -v -x c++ < /dev/null

请注意,您必须指定没有要预处理的文件;否则,它会尝试从标准输入读取。

上面显示了c ++的默认包含路径。

答案 2 :(得分:0)

/usr/include开始,从那里开始工作,假设它是系统标题。大多数系统头文件存储在UNIX / Linux系统下。

如果它不是系统标题,那么它将是您(或其他第三方)放置它的地方(可能在任何地方)。如果你想找到它,你可以做一些事情(对于xyzzy.h):

find / -name xyzzy.h 2>/dev/null

如果您无法找到您期望的标头,那么它可能不会安装在您的系统上。你需要弄清楚如何做到这一点。例如,Open Group有一个LGPL-style DCE implementation,可以在Linux下使用。

根据您的平台(AIX,HP-UX,Solaris等),安装软件包可能很简单。