Linux共享庫路徑配置

2021-06-25 13:31:18 字數 2024 閱讀 6575

分類: linux

2012-12-18 22:27

3060人閱讀收藏

舉報 linux下找不到共享庫檔案的典型現象為明明已經安裝某個軟包(如libnet,mysql

),編譯鏈結可以正常進行,但是在執行時出現如「

error while loading shared libraries: libnet.so.1:cannot open shared object file :no such file or directory

」的錯誤提示。

原因是linux

下的共享庫路徑配置不正確。預設的

linux

共享庫搜尋路徑為

/lib

和/usr/lib

兩個目錄(不包含子目錄),若共享庫不在這兩個路徑

(最典型的就是

/usr/local/lib

),不能被自動動態鏈結到

解決方法有四種

1,鏈結時使用靜態庫(

.a檔案)。在

g++命令上寫入改

.a檔案的完整路徑。

2,修改

ld_library_path

環境變數。(臨時有效,且有時候沒有效果)

3,將庫檔案複製到可以搜尋到的路徑裡面,這樣比較狠,但是可能導致一些後即問題。

4,新增搜尋路徑,使用

ldconfig

命令(下面詳細介紹)。

新增搜尋路徑方法步驟:

make install

)。2,使用

locate

命令找到該庫的被預設安裝的路徑,使用方法是先用

updatedb

更新一下

locate

命令的索引庫,然後「

locate libnet.so

」查詢就可以了,在這裡我發現,自動編譯安裝的庫檔案被放在了

/usr/local/lib

目錄。3,修改

/etc/ld.so.conf

,新增路徑。在

centos 6.3

下我看到這個檔案實際上是包含了

/etc/ld.so.conf.d/

這個目錄下的所有

.conf

檔案,因此我們可以在這個路徑下面建立乙個新的檔案,其中寫上諸如「

/usr/local/lib

」、「/usr/local/mysql/lib

」的路徑,儲存退出。

4,切記一定要主動執行命令:

ldconfig

,它會更新記錄了系統中有哪些

so檔案的快取檔案(

/etc /ld.so.cache)

原載於另外我發現:

ldconfig幾個需要注意的地方

1. 往/lib和/usr/lib裡面加東西,是不用修改/etc/ld.so.conf的,但是完了之後要調一下ldconfig,不然這個library會找不到

2. 想往上面兩個目錄以外加東西的時候,一定要修改/etc/ld.so.conf,然後再呼叫ldconfig,不然也會找不到

比如安裝了乙個mysql到/usr/local/mysql,mysql有一大堆library在 /usr/local/mysql/lib下面,這時就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,儲存 過後ldconfig一下,新的library才能在程式執行時被找到。

3. 如果想在這兩個目錄以外放lib,但是又不想在/etc/ld.so.conf中加東西(或者是沒有許可權加東西)。那也可以,就是export乙個全域性變 量ld_library_path,然後執行程式的時候就會去這個目錄中找library。一般來講這只是一種臨時的解決方案,在沒有許可權或臨時需要的時候使用。

4. ldconfig做的這些東西都與執行程式時有關,跟編譯時一點關係都沒有。編譯的時候還是該加-l就得加,不要混淆了。

5. 總之,就是不管做了什麼關於library的變動後,最好都ldconfig一下,不然會出現一些意想不到的結果。不會花太多的時間,但是會省很多的事。

Linux共享庫路徑配置詳解

linux共享庫路徑配置詳解 linux下找不到共享庫檔案的典型現象為明明已經安裝某個軟包 如libnet,mysql 編譯連線可以正常進行,但是在執行時出現如 error while loading shared libraries libnet.so.1 cannot open shared o...

Linux動態庫路徑配置

為什麼要關注動態庫路徑配置,是因為工作中遇到動態庫依賴其他動態庫,而其他動態庫又找不到的問題。有一篇部落格寫的特別全 linux 系統上有兩類根本不同的 linux 可執行程式。第一類是靜態鏈結的可執行程式。靜態可執行程式包含執行所需的所有函式 換句話說,它們是 完整的 因為這一原因,靜態可執行程式...

在linux下設定共享庫路徑

移植程式時的經常碰到需要使用一些特定的動態庫,而這些編譯好的動態庫放在我們自己建立的目錄裡,這時可以將這些目錄設定到ld library path中 那麼就需要指定 環境變數 ld library path 假如現在需要在已有的 環境變數 上新增新的 路徑 名,則採用如下方式 ld library ...