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