Linux動態庫搜尋路徑 目錄 設定

2021-10-02 18:10:11 字數 1062 閱讀 1392

今天編譯完程式執行的時候,報乙個錯誤,說庫檔案不存在,然後我看了一下,程式的當前路徑下就有這個庫檔案,我以前的認知是程式會首先在當前路徑下找庫,但是這個理解似乎對windows正確,linux是有區別的.

在linux 中,動態庫的搜尋路徑除了預設的搜尋路徑外,還可通過三種方法來指定:

方法一:在配置檔案/etc/ld.so.conf中指定動態庫搜尋路徑;

方法二:通過環境變數ld_library_path指定動態庫搜尋路徑;

方法三:在編譯目標**時指定該程式的動態庫搜尋路徑。

方法一:在配置檔案/etc/ld.so.conf中指定動態庫搜尋路徑。

vi /etc/ld.so.conf

新增 lib目錄

ldconfig

方法二:通過環境變數ld_library_path指定動態庫搜尋路徑。

export ld_library_path=」ld_library_path:/opt/」

方法三:在編譯目標**時指定該程式的動態庫搜尋路徑。

還可以在編譯目標**時指定程式的動態庫搜尋路徑。通過gcc 的引數」-wl,-rpath,」指定

其中方法三可以避免安裝部署的麻煩

方法三示例

假設main.cpp,hello.h,hello.cpp,其中main.cpp呼叫了hello類中的方法

1 生成hello.so

g++ -shared hello.cpp -o libhello.so

2 編譯main.cpp,並鏈結,並指定執行時libhello.so的位置

g++ main.cpp -lhello -l./ -wl,-rpath=./ -o main

值得一提的是,如果採用帶版本號的庫,例如libhello.so.2

鏈結命令可使用g++ main.cpp libhello.so.2 -l./ -wl,-rpath=./ -o main

2)加入第二個so庫

g++ main.cpp -l./second/ -wl,-rpath=./second/ -lsecond -l./hello/ -wl,-rpath=./hello/ -lhello -o main

LINUX動態庫 SO 搜尋路徑 目錄 設定方法

方法一 在配置檔案 etc ld.so.conf中指定動態庫搜尋路徑。vi etc ld.so.conf 新增 lib目錄 ldconfig 方法二 通過環境變數ld library path指定動態庫搜尋路徑。export ld library path ld library path opt 方...

linux動態庫載入時搜尋路徑

對動態庫的實際應用還不太熟悉的讀者可能曾經遇到過類似 error while loading shared libraries 這樣的錯誤,這是典型的因為需要的動態庫不在動態鏈結器ld.so的搜尋路徑設定當中導致的。1 elf可執行檔案中動態段中dt rpath所指定的路徑。這實際上是通過一種不算很...

Linux 靜態庫與動態庫搜尋路徑設定

1.連線和執行時庫檔案搜尋路徑到設定 庫檔案在連線 靜態庫和共享庫 和執行 僅限於使用共享庫的程式 時被使用,其搜尋路徑是在系統中進行設定的。一般 linux 系統把 lib 和 usr lib 兩個目錄作為預設的庫搜尋路徑,所以使用這兩個目錄中的庫時不需要進行設定搜尋路徑即可直接使用。對於處於預設...