您好,登錄后才能下訂單哦!
這篇文章主要介紹了Linux下如何調用dll& .so庫,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Dynamic Link Library的縮寫。DLL是一個包含可由多個程序,同時使用的代碼和數據的庫。
{ void *handle=dlopen("./libdemo4.so",RTLD_LAZY); void(*fun)(int)=dlsym(handle,"diamond"); fun(5); dlclose(handle);}
使用libdl.so庫 動態庫加載的原理
dlopen 打開一個動態庫 dlsym 在打開動態庫找一個函數 dlclose 關閉動態庫 //dlerror 返回錯誤
注意了 動態庫是可以執行,靜態庫不能執行 但動態庫沒有main,不能獨立執行。 動態庫不會連接成程序的一部分。 程序執行的時候,必須需要動態庫文件。
ldd 察看程序需要調用的動態庫 ldd 只能察看可執行文件. readelf -h 察看執行程序頭. nm 察看庫中的函數符號
3.動態庫的編譯 3.1.編譯 -c -fpic(可選) 3.2.連接 -shared 4.使用動態庫 gcc 代碼 動態庫文件名 gcc 代碼 -l庫名 -L動態庫所在路徑
標準命名規則: lib庫名.so lib庫名.a
-l 庫名 -L 庫所在路徑
大深坑: 4.1.執行程序怎么加載動態庫? 4.2.動態庫沒有作為執行程序的一部分,為什么連接需要指定動態庫以及目錄? 連接器需要確定函數在動態庫的中的位置
動態庫的加載: 1.找到動態庫 2.加載動態庫到內存 3.映射到用戶的內存空間 系統對動態庫查找規則: /lib /usr/lib 到環境變量LD_LIBRARY_PATH指定的路徑中查找
三.靜態庫的編譯 1.編譯過程(*.a achieve) 1.1.編譯成目標文件 -static 可選 gcc -c -static 代碼文件.c
1.2.歸檔成靜態庫 ar工具 ar -r -t ar -r 靜態庫文件 被歸檔的文件
nm工具(察看函數符號表) nm 靜態庫或者動態庫或者目標文件或者執行文件
1.3.使用靜態庫 gcc 代碼 靜態庫
結晶步驟:
1.函數等代碼封裝的二進制已經編譯的歸檔文件 2.ar歸檔方式 庫的方式
3.編譯好的程序運行的時候不依賴庫。庫作為程序的一部分編譯連接。
4.文件集合(歸檔)
5.庫命名規則 注意了: lib庫名.a.主版本號.副版本號.批號 lib庫名.a 庫使用規則 -l 庫名 -L 庫所在目錄
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Linux下如何調用dll& .so庫”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。