Linux C語言標頭檔搜尋路徑

來源:互聯網
上載者:User

本文介紹在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_test.h>或者#include <include_test.h>,然後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 <sys/types.h>就是包含檔案/usr/include/sys/types.h

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.