linux下的標頭檔案和哭的搜尋

2021-08-06 04:42:11 字數 1728 閱讀 3849

c/c++程式在linux下被編譯和連線時,gcc/g++會查詢系統預設的include和link的路徑,以及自己在編譯命令中指定的路徑。自己指定的路徑就不說了,這裡說明一下系統自動搜尋的路徑。

include標頭檔案路徑

除了預設的/usr/include, /usr/local/include等include路徑外,還可以通過設定環境變數來新增系統include的路徑:

# cexport c_include_path=***x:$c_include_path

# cpp

export cplus_include_path=***:$cplus_include_path

以上修改可以直接命令列輸入(一次性),可以在/etc/profile中完成(對所有使用者生效),也可以在使用者home目錄下的.bashrc或.bash_profile中新增(針對某個使用者生效),修改完後重新登入即生效。

1)      #include「headfile.h」

搜尋順序為:

①先搜尋當前目錄

②然後搜尋-i指定的目錄

③再搜尋gcc的環境變數cplus_include_path(c程式使用的是c_include_path)

④最後搜尋gcc的內定目錄

/usr/include

/usr/local/include

/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include

各目錄存在相同檔案時,先找到哪個使用哪個。

2)     #include

①先搜尋-i指定的目錄

②然後搜尋gcc的環境變數cplus_include_path

③最後搜尋gcc的內定目錄

/usr/include

/usr/local/include

/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include

與上面的相同,各目錄存在相同檔案時,先找到哪個使用哪個。這裡要注意,#include<>方式不會搜尋當前目錄!

link鏈結庫檔案路徑

鏈結庫檔案在連線(靜態庫和共享庫)和執行(僅限於使用共享庫的程式)時被使用,其搜尋路徑是在系統中進行設定的(也可以在編譯命令中通過 -l -l 來指定,這裡講的是使用系統預設搜尋路徑)。

一般 linux 系統把 /lib /usr/lib /usr/local/lib 作為預設的庫搜尋路徑,所以使用這幾個目錄中的鏈結庫檔案可直接被搜尋到(不需要專門指定鏈結庫路徑)。對於預設搜尋路徑之外的庫,則需要將其所在路徑新增到gcc/g++的搜尋路徑之中。

鏈結庫檔案的搜尋路徑指定有兩種方式:1)修改/etc/so.ld.conf 2)修改環境變數,在其中新增自己的路徑

1)在環境變數中新增

動態鏈結庫搜尋路徑:

export ld_library_path=***:$ld_library_path

靜態鏈結庫搜尋路徑:

export library_path=***:$library_path

以上修改可以直接命令列輸入(一次性),可以在/etc/profile中完成(對所有使用者生效),也可以在使用者home目錄下的.bashrc或.bash_profile中新增(針對某個使用者生效),修改完後重新登入即生效。

2)在/etc/ld.so.conf 中新增指定的鏈結庫搜尋路徑(需要root許可權),然後執行 /sbin/ldconfig,以達到重新整理 /etc/ld.so.cache的效果。

以上兩種方式均可以達到指定鏈結庫搜尋路徑的效果。

Linux下的標頭檔案

1 linux中一些標頭檔案的作用 ansi c。提供斷言,assert 表示式 gcc。gtk,gnome的基礎庫,提供很多有用的函式,如有資料結構操作函式。使用glib只需要包含 gcc。資料夾操作函式。struct dirent,struct dir,opendir closedir read...

Linux下新增哭檔案路徑

linux作業系統中,linux庫檔案路徑還是比較常用的,於是我研究了一下linux庫檔案路徑,在這裡拿出來和大家分享一下,希望對大家有用。庫檔案在連線 靜態庫和共享庫 和執行 僅限於使用共享庫的程式 時被使用,其搜尋路徑是在系統中進行設定的。一般 linux 系統把 lib 和 usr lib 兩...

Linux系統的標頭檔案和庫檔案搜尋路徑

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