Linux標頭檔案及動態庫路徑設定

2021-07-08 14:07:32 字數 1882 閱讀 1524

對於開源的第三方的庫,在make;make install之後,一版會把庫安裝到/usr/local/lib,把頭檔案安裝到/usr/local/include目錄。

linux把/lib和/usr/lib兩個目錄作為預設的庫搜尋路徑,所以使用這兩個目錄的庫時,不需要進行庫搜尋路徑設定,可以直接使用。

對於其他路徑的庫檔案,則需要設定相應的庫搜尋路徑。設定的方式主要有3種:

一、ld_library_path

這種方法是常用的動態庫載入方法。該變數只在程式執行時才起作用。它可以設定多個路徑,用「:」分隔,設定方法如下:

export ld_library_path=/usr/local/lib;my_other_path

二、/etc/ld.so.conf.d/和pkg_config_path

1. sudo gedit /etc/ld.so.conf.d/***.conf

例如:在***.conf中寫入新增的庫所在路徑/usr/local/lib

2. sudo ldconfig //到這一步,執行時就可以找到相應的動態庫了

將/etc/ld.so.conf列出的路徑下的庫檔案 快取到/etc/ld.so.cache 以供使用,否則會編譯報錯,找不到新增的庫檔案

3. sudo gedit /etc/bash.bashrc //這裡設定pkg_config_path,是為了編譯程式時用

在最後新增: export pkg_config_path=$pkg_config_path:/usr/local/lib/pkgconfig

備註:使用pkg_config_path一般是編譯時用的,它需要庫有相應的.pc檔案支援,否則無法設定該變數。

三、編譯時指定動態庫路徑

把庫檔案路徑寫在makefile裡面,例如鏈結的時候,加上編譯選項-l/my_lib_path

-wl,表示後面的引數將傳給link程式ld(因為gcc可能會自動呼叫ld)。這裡通過gcc 的引數」-wl,-rpath,」指定,例如:

假設lib_test.so在/root/test/lib下面,那麼

gcc -o main.out -l. –l_test -wl,-rpath,/root/test/lib main.c

關於-wl,rpath的使用方法我再舉乙個例子,應該不難從中看出指定多個路徑的方法:

gcc -wl,-rpath,/home/arc/test,-rpath,/lib/,-rpath,/usr/lib/,-rpath,/usr/local/lib test.c

備註:===》動態庫的搜尋路徑搜尋的先後順序是:

1.編譯目標**時指定的動態庫搜尋路徑;

2.環境變數ld_library_path指定的動態庫搜尋路徑;

3.配置檔案/etc/ld.so.conf中指定的動態庫搜尋路徑;

4.預設的動態庫搜尋路徑/lib

5.預設的動態庫搜尋路徑/usr/lib

===》可以修改環境變數的檔案

/etc/init.d/rc.local -> /etc/profile (系統登入前呼叫)

/etc/bash.bashrc (shell執行時呼叫)

~/.bashrc

===》可執行程式搜尋路徑

如果想在shell上執行可執行程式,則需要把可執行程式的路徑加到當前的環境變數path中,例如:

export path=$path:"my_exe_path"

===》在makefile中pkg-config的用法

cflags=`pkg-config --cflags opencv` // ``這個符號代表執行裡面的命令

ldflags=`pkg-config --libs opencv`

gcc $(cflags) -c $<

gcc $(cflags) -o $@ $^ $(ldfags)

linux新增標頭檔案路徑 動態庫路徑

對所有使用者有效在 etc profile增加以下內容。如果只對當前使用者有效在home目錄下的.bashrc或.bash pro file裡增加下面的內容 注意 等號前面不要加空格,否則可能出現 command not found 在path中找到可執行檔案程式的路徑。export path pa...

gcc指定標頭檔案路徑及動態鏈結庫路徑

include 直接到系統指定的某些目錄中去找某些標頭檔案。include 先到原始檔所在資料夾去找,然後再到系統指定的某些目錄中去找某些標頭檔案。1.會在預設情況下指定到 usr include資料夾 更深層次的是乙個相對路徑,gcc可執行程式的路徑是 usr bin gcc,那麼它在實際工作時指...

gcc指定標頭檔案及動態鏈結庫路徑

在利用源 進行軟體編譯的過程中,經常會出現以下錯誤 include 直接到系統指定的某些目錄中去找某些標頭檔案。include 先到原始檔所在資料夾去找,然後再到系統指定的某些目錄中去找某些標頭檔案。那麼gcc如何確定標頭檔案搜尋路徑呢?q 檔案路徑有多種,那麼先後順序如何?i 指定的路徑 gcc ...