有时候,我们需要浏览系统头文件的内容从而知道该头文件里都有哪些函数以及类型,但如何找到这些系统头文件所在的文件目录呢?可以通过写一个简单的c++程序,来观察g++是怎么查找系统头文件的。
譬如下面的一段程序:
#include<nonexist.h> // This is a non-existant system header
int main ( int argc, char* argv[] )
{
return 0;
}
因为文件“nonexist.h”是用<>括住,所以g++在查找该文件时会去系统头文件所在的目录查找,而这又是一个不存在的文件,所以g++会搜遍所有能搜的文件目录,最后编译告知没有找到该文件:
gcc version 4.7.2 (Debian 4.7.2-5)
COLLECT_GCC_OPTIONS='-v' '-c' '-shared-libgcc' '-mtune=generic' '-march=i586'
/usr/lib/gcc/i486-linux-gnu/4.7/cc1plus -quiet -v -imultiarch i386-linux-gnu -D_GNU_SOURCE test_open.cpp -quiet -dumpbase test_open.cpp -mtune=generic -march=i586 -auxbase test_open -version -o /tmp/ccQHsJ9S.s
GNU C++ (Debian 4.7.2-5) version 4.7.2 (i486-linux-gnu)
compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.1.0-p10, MPC version 0.9
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64350
ignoring nonexistent directory "/usr/local/include/i386-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/i486-linux-gnu/4.7/../../../../i486-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/4.7
/usr/include/c++/4.7/i486-linux-gnu
/usr/include/c++/4.7/backward
/usr/lib/gcc/i486-linux-gnu/4.7/include
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.7/include-fixed
/usr/include/i386-linux-gnu
/usr/include
End of search list.
GNU C++ (Debian 4.7.2-5) version 4.7.2 (i486-linux-gnu)
compiled by GNU C version 4.7.2, GMP version 5.0.5, MPFR version 3.1.0-p10, MPC version 0.9
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64350
Compiler executable checksum: 62bfd556e00a93e3d7f66f6876d73826
test_open.cpp:1:22: fatal error: nonexist.h: No such file or directory
compilation terminated.