linux環境中動態庫的搜尋路徑預設是/usr/lib或/lib,在程式執行時需要某個動態庫,才會去預設路徑下尋找動態庫。
當我們自己編譯的動態庫不在預設路徑下,就會產生如下的報錯:
./test.out: error while loading shared libraries: libtest1.so:
cannot open shared object file: no such file or directory
解決方法一:
將動態庫儲存到預設路徑下,建議少用,系統檔案會雜亂。
(sudo) cp libname.so /usr/lib/
刪除:
(sudo) rm /usr/lib/libname.so
解決方法二:
配置環境變數,將動態庫所在的路徑配置到環境變數
export ld_library_path="/home/pi/lib"
//" "內是編譯的動態庫所在的目錄,可用pwd命令檢視
但是有一點缺陷,該環境變數是臨時的,只針對當前視窗,更換視窗後執行失敗。因此,可以寫乙個指令碼。
//命名start.sh的指令碼,內容為:
export ld_library_path="/home/pi/lib"
./test.out
給指令碼加可執行的許可權:chmod +x start.sh
執行時,./start.sh即可使用
linux 下生成動態庫 so並引用
動態庫的引入及減少了主 檔案的大小,同時生成的動態庫又是動態載入的,只有執行的時候才去載入,linux 下的 動態庫 so 就像windows下的 dll一樣。有關動態庫的概念自行上網搜。一下是建立及引用動態庫 test so.h ifndef test so h define test so h ...
eclipse c c 程式設計引用動態庫(so)
動態庫的引用 右擊專案,選中屬性,在屬性頁中 c c build settings tool settings gcc c compiler command 欄寫上gcc lpthread ltcmrdriver 使用者自定義庫libtcmrdriver.so 同樣在gcc c linker的com...
linux 靜態庫 動態庫
1.概念和區別 靜態庫就是在編譯過程中一些目標檔案的集合。靜態庫在程式鏈結的時候使用,鏈結器會將程式中使用到函式的 從庫檔案中拷貝到應用程式中。一旦鏈結完成,在執行程式的時候就不需要靜態庫了。由於每個使用靜態庫的應用程式都需要拷貝所用函式的 所以靜態鏈結的檔案會比較大。相對於靜態函式庫,動態函式庫在...