Linux 標頭檔案及其搜尋路徑

2021-06-13 11:00:18 字數 1953 閱讀 2013

**

本文介紹在linux中標頭檔案的搜尋路徑,也就是說你通過include指定的標頭檔案,linux下的gcc編譯器它是怎麼找到它的呢。在此之前,先了解乙個基本概念。

標頭檔案是一種文字檔案,使用文字編輯器將**編寫好之後,以副檔名.h儲存就行了。標頭檔案中一般放一些重複使用的**,例如函式宣告、變數宣告、常數定義、巨集的定義等等。當使用#include語句將標頭檔案引用時,相當於將標頭檔案中所有內容,複製到#include處。#include有兩種寫法形式,分別是:

#include <> : 直接到系統指定的某些目錄中去找某些標頭檔案。

#include 「」 : 先到原始檔所在資料夾去找,然後再到系統指定的某些目錄中去找某些標頭檔案。

#include檔案可能會帶來乙個問題就是重複應用,如a.h引用的乙個函式是某種實現,而b.h引用的這個函式卻是另外一種實現,這樣在編譯的時候將會出現錯誤。所以,為了避免因為重複引用而導致的編譯錯誤,標頭檔案常具有:

#ifndef    label

#define    label

//**部分

#endif

的格式。其中label為乙個唯一的標號,命名規則跟變數的命名規則一樣。常根據它所在的頭檔名來命名,例如,如果標頭檔案的檔名叫做hardware.h,那麼可以這樣使用:

#ifndef    __hardware_h__

#define    __hardware_h__

//**部分

#endif

這樣寫的意思就是,如果沒有定義__hardware_h__,則定義__hardware_h__,並編譯下面的**部分,直到遇到#endif。這樣當重複引用時,由於__hardware_h__已經被定義,則下面的**部分就不會被編譯了,這樣就避免了重複定義。

一句話,標頭檔案事實上只是把一些常用的命令整合在裡面,你要用到哪方面的命令就載入哪個標頭檔案就可以了。

gcc尋找標頭檔案的路徑(按照1->2->3的順序)

1. 在gcc編譯原始檔的時候,通過引數-i指定標頭檔案的搜尋路徑,如果指定路徑有多個路徑時,則按照指定路徑的順序搜尋標頭檔案。命令形式如:「gcc -i /path/where/theheadfile/in sourcefile.c「,這裡原始檔的路徑可以是絕對路徑,也可以是相對路徑。eg:

設當前路徑為/root/test,include_test.c如果要包含標頭檔案「include/include_test.h「,有兩種方法:

1) include_test.c中#include 「include/include_test.h」或者#include "/root/test/include/include_test.h",然後gcc include_test.c即可

2) include_test.c中#include 或者#include ,然後gcc –i include include_test.c也可

2. 通過查詢gcc的環境變數c_include_path/cplus_include_path/objc_include_path來搜尋標頭檔案位置。

3. 再找內定目錄搜尋,分別是

/usr/include

/usr/local/include

/usr/lib/gcc-lib/i386-linux/2.95.2/include

最後一行是gcc程式的庫檔案位址,各個使用者的系統上可能不一樣。

gcc在預設情況下,都會指定到/usr/include資料夾尋找標頭檔案。

gcc還有乙個引數:-nostdinc,它使編譯器不再系統預設的頭檔案目錄裡面找標頭檔案,一般和-i聯合使用,明確限定標頭檔案的位置。在編譯驅動模組時,由於非凡的需求必須強制gcc不搜尋系統預設路徑,也就是不搜尋/usr/include要用引數-nostdinc,還要自己用-i引數來指定核心標頭檔案路徑,這個時候必須在makefile中指定。

4. 當#include使用相對路徑的時候,gcc最終會根據上面這些路徑,來最終構建出頭檔案的位置。如#include 就是包含檔案/usr/include/sys/types.h

Linux標頭檔案庫檔案搜尋路徑

include的header檔案,鏈結資料庫,系統定義,總共有下列 指定gcc去那找。當初在編譯時指定的 在 gcc gcc collect2.c locatelib 寫在specs內的 後來用 d i l指定的 gcc環境變數設定 編譯的時候 ld.so的環境變數 這是run time的時候 一 ...

linux gcc 標頭檔案搜尋路徑

2011 02 15 13 40 423人閱讀收藏 舉報一 標頭檔案 gcc 在編譯時尋找所需要的標頭檔案 搜尋會從 i開始 然後找gcc的環境變數 c include path,cplus include path,objc include path 再找內定目錄 usr include usr ...

linux gcc標頭檔案搜尋路徑

include 直接到系統指定的某些目錄中去找某些標頭檔案。include 先到原始檔所在資料夾去找,然後再到系統指定的某些目錄中去找某些標頭檔案 1 i指定的路徑 絕對或相對路徑 2 環境變數 c include path,cplus include path,objc include path ...