成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux下動(dòng)態(tài)庫(kù)的顯性調(diào)用(dlopen)和隱性調(diào)用區(qū)別

系統(tǒng) Linux
今天我們一起來(lái)聊一聊Linux下動(dòng)態(tài)庫(kù)的顯性調(diào)用(dlopen)和隱性調(diào)用區(qū)別。

在linux環(huán)境下編程,我們?nèi)绻胍褂玫谌降膸?kù),基本上有以下幾種方式。

1、將第三方庫(kù)的源碼合并到我們的工程項(xiàng)目代碼中,一起編譯。

2、將第三方庫(kù)編譯成靜態(tài)庫(kù)(xxx.a),我們?cè)谑褂脮r(shí),在Makefile中引用該靜態(tài)庫(kù)。

3、將第三方庫(kù)編譯成動(dòng)態(tài)庫(kù)(xxx.so), 我們?cè)谑褂脮r(shí),隱性調(diào)用該動(dòng)態(tài)庫(kù),具體表現(xiàn)為需要 在程序中包含動(dòng)態(tài)庫(kù)的 頭文件,同時(shí)需要在/usr/lib路徑下,存放動(dòng)態(tài)庫(kù)文件,以便程序調(diào)用。

4、將第三方庫(kù)編譯成動(dòng)態(tài)庫(kù)(xxx.so), 我們?cè)谑褂脮r(shí),顯性調(diào)用該動(dòng)態(tài)庫(kù),在程序中,不需要包含動(dòng)態(tài)庫(kù)的頭文件,使用 dlopen、dlsym等接口函數(shù)調(diào)用該動(dòng)態(tài)庫(kù)。

在上述四種方式中:

第 1 和 2 種,本質(zhì)上是一樣的,使用靜態(tài)庫(kù),編譯時(shí),會(huì)將靜態(tài)庫(kù)的內(nèi)容合并到工程代碼中,唯一區(qū)別的是當(dāng)我們拿不到第三方庫(kù)的源碼時(shí),可以直接使用靜態(tài)庫(kù),相當(dāng)于使用一個(gè)黑盒子,靜態(tài)庫(kù)提供接口。

第 3 和 4 種方式,我們常用的是第3種方式,也就是隱性調(diào)用,但是顯性調(diào)用一種程序插件的概念,隨用隨加載,不用不加載。

顯性調(diào)用和隱性調(diào)用區(qū)別

名稱(chēng)使用方式動(dòng)態(tài)庫(kù)文件內(nèi)存其他隱性調(diào)用引用動(dòng)態(tài)庫(kù)頭文件需要提前拷貝到/usr/lib/目錄,否則程序無(wú)法執(zhí)行程序開(kāi)始執(zhí)行,不管是否用到動(dòng)態(tài)庫(kù)功能,都會(huì)將動(dòng)態(tài)庫(kù)讀到內(nèi)存中不會(huì)額外調(diào)用插件庫(kù)顯性調(diào)用不需要引用動(dòng)態(tài)庫(kù)頭文件,但是需要引用不一定,如果程序不會(huì)執(zhí)行到動(dòng)態(tài)庫(kù)功能,則不需要拷貝,即便使用,也可以使用絕對(duì)路徑來(lái)使用,不需要拷貝到/usr/lib/目錄下只有程序執(zhí)行到dlopen時(shí),才會(huì)將動(dòng)態(tài)庫(kù)讀入內(nèi)存會(huì)額外調(diào)用linux插件庫(kù),來(lái)支持顯性調(diào)用。

在使用dlopen時(shí),編譯時(shí)候要加入 -ldl (指定dl庫(kù)),若dl庫(kù)有問(wèn)題,那么在運(yùn)行時(shí)調(diào)用dlopen時(shí)會(huì)出現(xiàn)段錯(cuò)誤。因此要保證dl庫(kù)沒(méi)問(wèn)題。

開(kāi)發(fā)時(shí)遇到一個(gè)問(wèn)題,本地需要編寫(xiě)一個(gè)so庫(kù)給應(yīng)用程序提供接口,在應(yīng)用程序中使用dlopen來(lái)打開(kāi)so庫(kù),但是運(yùn)行時(shí)調(diào)用dlopen時(shí)出現(xiàn)段錯(cuò)誤。

原因是應(yīng)用程序編譯時(shí)引用應(yīng)用程序中l(wèi)ib下的dl庫(kù),該庫(kù)有問(wèn)題導(dǎo)致運(yùn)行時(shí)出現(xiàn)段錯(cuò)誤。解決方式就是把應(yīng)用程序中l(wèi)ib下的dl庫(kù)給替換掉。

小結(jié)

顯性調(diào)用更多的是體現(xiàn)在“插件”的思想,使用起來(lái)更加靈活,比如大的工程項(xiàng)目中,同樣一套代碼,提供不一樣的功能時(shí),為了節(jié)省內(nèi)存、磁盤(pán)容量,可以按需加載。在使用方式上,顯性調(diào)用相比隱性調(diào)用,略復(fù)雜,需要增加額外的轉(zhuǎn)換代碼,而隱性調(diào)用,只需要包含動(dòng)態(tài)庫(kù)頭文件,在代碼中,直接調(diào)用API即可。在生產(chǎn)程序中,如果對(duì)內(nèi)存或磁盤(pán)、啟動(dòng)速度沒(méi)有嚴(yán)苛的要求,盡量使用隱形調(diào)用,方便程序編寫(xiě)和維護(hù)。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2023-03-30 15:07:57

Linux編程開(kāi)發(fā)

2012-07-09 13:21:51

2010-01-07 17:55:44

Linux動(dòng)態(tài)庫(kù)

2010-01-07 17:42:23

Linux動(dòng)態(tài)庫(kù)

2023-03-15 15:58:11

Python動(dòng)態(tài)庫(kù)C++

2022-04-26 13:49:18

大數(shù)據(jù)個(gè)人信息營(yíng)銷(xiāo)

2011-07-25 15:46:10

iPhone 動(dòng)態(tài) 類(lèi)

2009-10-16 11:02:40

VB調(diào)用動(dòng)態(tài)連接庫(kù)

2011-01-14 14:22:50

Linux匯編語(yǔ)言

2011-01-14 14:15:11

Linux匯編語(yǔ)言

2010-03-04 09:51:07

Linux動(dòng)態(tài)庫(kù)

2011-04-25 16:35:06

Linux調(diào)用

2010-03-04 10:04:10

Linux動(dòng)態(tài)庫(kù)

2010-04-12 09:07:09

Make命令

2022-04-22 15:06:59

C++PythonJava

2023-02-01 08:11:40

系統(tǒng)調(diào)用函數(shù)

2024-03-01 20:59:11

C#DLL開(kāi)發(fā)

2011-05-18 17:15:45

2023-11-29 08:31:20

PythonRust

2009-07-31 09:05:11

隱性成本
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 麻豆久久久9性大片 | 综合色播 | 国产成人精品午夜视频免费 | 九九在线精品视频 | 在线视频h | 亚洲一级毛片 | 亚洲高清在线 | 国产精品色一区二区三区 | 亚洲午夜小视频 | 亚洲天堂av在线 | 一区二区在线免费播放 | 亚洲国产成人精品女人久久久 | 欧美一区二区三区在线 | 91天堂| 国产成人99久久亚洲综合精品 | 99精品国产一区二区青青牛奶 | 综合久久久 | 亚洲精品一区二区三区 | 国产极品粉嫩美女呻吟在线看人 | 精品国产一区二区三区久久久蜜月 | 亚洲精品一区二区在线观看 | 亚洲一二三区不卡 | 国产女人叫床高潮大片免费 | 久久久精品影院 | 毛片网站免费观看 | 久久国产一区 | 久久手机在线视频 | 成人天堂 | 精品电影 | 国产一区二区三区在线 | 美女福利网站 | 最新日韩精品 | 久久成人综合 | 久久最新 | 精品久久久久久久久久 | 欧美日韩国产在线观看 | 亚洲二区视频 | 亚洲精品91 | 91久久精品一区二区二区 | 伊人影院在线观看 | 亚洲天堂免费 |