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

2022-05-20 11:12:35 字數 1579 閱讀 1897

方法一:在配置檔案/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

ps,遇到過乙個奇怪的問題,就是假設libhello.so還用到了libother.so,由於在/etc/ld.so.conf裡配置錯誤了libother.so的目錄路徑,導致一直產生undefined reference to錯誤,但是在工程裡對libother目錄路徑配置是正確的,有可能於查詢路徑順序有關

假設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

ps,遇到過乙個奇怪的問題,就是假設libhello.so還用到了libother.so,由於在/etc/ld.so.conf裡配置錯誤了libother.so的目錄路徑,導致一直產生undefined reference to錯誤,但是在工程裡對libother目錄路徑配置是正確的,有可能於查詢路徑順序有關

三種方法 Linux動態庫 so 搜尋路徑

方法一 在配置檔案 etc ld.so.conf中指定動態庫搜尋路徑。可以通過編輯配置檔案 etc ld.so.conf來指定動態庫的搜尋路徑,該檔案中每行為乙個動態庫搜尋路徑。每次編輯完該檔案後,都必須執行命令ldconfig使修改後的配置生效。我們通過例1來說明該方法。例1 我們通過以下命令用源...

linux下動態庫( so 的路徑問題

最近在使用wxwidgets,這是乙個跨平台的c 庫,在linux下編譯成動態庫 so 如果將編譯後的可執行檔案發布到其他機器的linux系統中,需要帶上.so檔案,這就需要設定一下這些動態庫的路徑,一般可以使用環境變數ld library path來設定,可以在終端中直接輸出如下的命令 expor...

Linux 動態庫 so 使用

折騰了會 dll 覺得不爽,改玩 so 去 一.編寫個c檔案 test.c include file test.c int say int add int x,int y 二.編譯成動態庫 so gcc shared o test.so test.c usr lib gcc x86 64 pc li...