日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

[转]Linux C语言头文件搜索路径

發(fā)布時間:2025/3/20 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]Linux C语言头文件搜索路径 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)自:http://hi.baidu.com/ilonng/blog/item/a0232435fbcfb90490ef390d.html/cmtid/68d4ab7bbb8026fb0ad187be

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

?? ?頭文件是一種文本文件,使用文本編輯器將代碼編寫好之后,以擴(kuò)展名.h保存就行了。頭文件中一般放一些重復(fù)使用的代碼,例如函數(shù)聲明、變量聲明、常數(shù)定 義、宏的定義等等。當(dāng)使用#include語句將頭文件引用時,相當(dāng)于將頭文件中所有內(nèi)容,復(fù)制到#include處。#include有兩種寫法形式, 分別是:

#include <> : 直接到系統(tǒng)指定的某些目錄中去找某些頭文件。

#include “” : 先到源文件所在文件夾去找,然后再到系統(tǒng)指定的某些目錄中去找某些頭文件。

?? ?

?? ?#include文件可能會帶來一個問題就是重復(fù)應(yīng)用,如a.h引用的一個函數(shù)是某種實現(xiàn),而b.h引用的這個函數(shù)卻是另外一種實現(xiàn),這樣在編譯的時候?qū)霈F(xiàn)錯誤。所以,為了避免因為重復(fù)引用而導(dǎo)致的編譯錯誤,頭文件常具有:

#ifndef ? ?LABEL

#define ? ?LABEL

?? ?//代碼部分

#endif

的格式。其中LABEL為一個唯一的標(biāo)號,命名規(guī)則跟變量的命名規(guī)則一樣。常根據(jù)它所在的頭文件名來命名,例如,如果頭文件的文件名叫做hardware.h,那么可以這樣使用:

#ifndef ? ?__HARDWARE_H__

#define ? ?__HARDWARE_H__

??//代碼部分

#endif

這樣寫的意思就是,如果沒有定義__HARDWARE_H__,則定義__HARDWARE_H__,并編譯下面的代碼部分,直到遇到#endif。這樣當(dāng)重復(fù)引用時,由于__HARDWARE_H__已經(jīng)被定義,則下面的代碼部分就不會被編譯了,這樣就避免了重復(fù)定義。

?

?? ?一句話,頭文件事實上只是把一些常用的命令集成在里面,你要用到哪方面的命令就載入哪個頭文件就可以了。

?

?? ?gcc尋找頭文件的路徑(按照1->2->3的順序)

?? ?1. 在gcc編譯源文件的時候,通過參數(shù)-I指定頭文件的搜索路徑,如果指定路徑有多個路徑時,則按照指定路徑的順序搜索頭文件。命令形式如:“gcc -I /path/where/theheadfile/in sourcefile.c“,這里源文件的路徑可以是絕對路徑,也可以是相對路徑。eg:

設(shè)當(dāng)前路徑為/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的環(huán)境變量C_INCLUDE_PATH/CPLUS_INCLUDE_PATH/OBJC_INCLUDE_PATH來搜索頭文件位置。

?

?? ?3. 再找內(nèi)定目錄搜索,分別是

/usr/include

/usr/local/include

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

最后一行是gcc程序的庫文件地址,各個用戶的系統(tǒng)上可能不一樣。

?? ?gcc在默認(rèn)情況下,都會指定到/usr/include文件夾尋找頭文件。

?? ?gcc還有一個參數(shù):-nostdinc,它使編譯器不再系統(tǒng)缺省的頭文件目錄里面找頭文件,一般和-I聯(lián)合使用,明確限定頭文件的位置。在編譯驅(qū)動模 塊時,由于非凡的需求必須強(qiáng)制GCC不搜索系統(tǒng)默認(rèn)路徑,也就是不搜索/usr/include要用參數(shù)-nostdinc,還要自己用-I參數(shù)來指定內(nèi) 核頭文件路徑,這個時候必須在Makefile中指定。


?? ?4. 當(dāng)#include使用相對路徑的時候,gcc最終會根據(jù)上面這些路徑,來最終構(gòu)建出頭文件的位置。如#include <sys/types.h>就是包含文件/usr/include/sys/types.h

總結(jié)

以上是生活随笔為你收集整理的[转]Linux C语言头文件搜索路径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。