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