1. 程式人生 > >如何找出g++編譯時的系統標頭檔案的搜尋路徑

如何找出g++編譯時的系統標頭檔案的搜尋路徑

有時候,我們需要瀏覽系統標頭檔案的內容從而知道該標頭檔案裡都有哪些函式以及型別,但如何找到這些系統標頭檔案所在的檔案目錄呢?可以通過寫一個簡單的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.