linux中include搜索的路徑

在寫c和c++代碼的時候,首先需要include必要的一些庫文件。對於庫文件的使用但凡會寫c的人抖動一些,不過include具體是怎麼引入的,卻鮮爲人知。

首先在c中引入頭文件一般是***.h的形式,而在c++中一般沒有.h。具體原因是c++的函數基本上都包含在std命名空間中,爲了能兼容c中的頭文件,就將c中原有的一些頭文件進行了重寫,並把他們包含在寫的名稱的文件中,入stdlib.h變成cstdlib.但是其中的內容是一樣的。

關於《》和“”的區別應該很簡單理解,

#include <***.h>,直接到系統指定目錄去查找頭文件。

#include "***.h",會先到當前目錄查找頭文件,如果沒找到在到系統指定目錄查找。

那麼系統指定目錄在哪裏?有資料說系統的指定目錄存在於C_INCLUDE_PATH和CPLUE_INCLUDE_PATH以及動態鏈接庫LD_INCLUDE_PATH中,但是不知什麼原因使用echo $C_INCLUDE_PATH顯示該環境變量爲空。

有資料顯示系統的默認指定目錄分別是/usr/include,/usr/local/include,(用戶空間的庫文件),/usr/include/i386-linux-gnu/sys/(系統級別的庫文件,引用此處的頭文件需要添加sys/)/usr/lib/gcc-lib/i386-linux/2.95.2/include(gcc庫文件的路徑,各個系統不一致)。

     當然有時候你會發現存在引入頭文件的時候包括路徑如:#include<sys/socket.h>這個說明該頭文件並沒有直接包含在系統的指定目錄中,該頭文件在指定目錄的子目錄sys目錄下。

     在查找include目錄的時候首先查找編譯選項中-l 後邊的目錄,然後依次查看系統默認的指定目錄。

      當你不知道所引用的頭文件的目錄在什麼地址的時候,可以使用Gcc -E ***.c >> ***.i 命令進行c文件的預處理,在產生.i 文件中包含了完整的頭文件路徑。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章