mooc课程精选,成品人片观看入口众乐乐,久久久久人妻一区精品性色av,苍兰诀大结局是什么,白丝美女被狂躁免费视频网站

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 動(dòng)態(tài)庫和靜態(tài)庫的區(qū)別

動(dòng)態(tài)庫和靜態(tài)庫的區(qū)別 時(shí)間:2018-09-26      來源:未知

一、什么是庫

本質(zhì)上來說庫是一種可執(zhí)行代碼的二進(jìn)制形式,可以被操作系統(tǒng)載入內(nèi)存執(zhí)行。

二、庫的種類

linux下的庫有兩種:靜態(tài)庫和共享庫(動(dòng)態(tài)庫)。

三、命名方式

靜態(tài)庫:lib庫名.a

動(dòng)態(tài)庫:lib庫名.so

區(qū)分一個(gè)概念:庫是包含前綴lib以及后綴.a或者.so的一個(gè)整體

庫名是去掉前綴和后綴剩下的部分

四、動(dòng)態(tài)庫和靜態(tài)庫的特點(diǎn)

靜態(tài)庫的特點(diǎn):

1、使用靜態(tài)庫的時(shí)候,會(huì)將靜態(tài)庫的信息直接編譯到可執(zhí)行文件中

2、優(yōu)點(diǎn):當(dāng)靜態(tài)庫被刪除,對(duì)可執(zhí)行文件沒有影響

3、缺點(diǎn):浪費(fèi)內(nèi)存空間。如果靜態(tài)庫被修改,可執(zhí)行程序要重新編譯

動(dòng)態(tài)庫的特點(diǎn):加載器在加載動(dòng)態(tài)庫時(shí),操作系統(tǒng)會(huì)先檢查動(dòng)態(tài)庫是否因?yàn)槠渌绦蛞呀?jīng)將這個(gè)動(dòng)態(tài)庫信息加載到了內(nèi)存中。如果沒有加載到內(nèi)存中,操作系統(tǒng)會(huì)將動(dòng)態(tài)庫載入內(nèi)存,并將它的引用計(jì)數(shù)設(shè)置為1;如果已經(jīng)加載到內(nèi)存,僅將動(dòng)態(tài)庫的引用計(jì)數(shù)加1。

五、如何知道一個(gè)可執(zhí)行程序依賴哪些庫

ldd命令可以查看一個(gè)可執(zhí)行程序依賴的共享庫

例如# ldd + 路徑/可執(zhí)行程序

六、創(chuàng)建靜態(tài)庫和動(dòng)態(tài)庫的過程

靜態(tài)庫:a、創(chuàng)建.o文件

b、ar -cr lib庫名.a *.o

動(dòng)態(tài)庫: a、創(chuàng)建.o文件 要使用-fpic選項(xiàng)

“-fpic”告訴GCC產(chǎn)生的代碼不要包含對(duì)函數(shù)和變量具體內(nèi)存位置的引用,這是因?yàn)楝F(xiàn)在還無法知道使用該代碼的應(yīng)用程序會(huì)將它連接到哪一段內(nèi)存地址空間。這樣編譯出的hello.o可以被用于建立共享鏈接庫。

b、 gcc -shared -o lib庫名.so *.o

七、如何使用庫

靜態(tài)庫:

a、如果靜態(tài)庫放在系統(tǒng)目錄/lib或者/usr/lib下

執(zhí)行方式為 gcc main.c -l庫名

b、如果靜態(tài)庫沒有放在系統(tǒng)目錄下則執(zhí)行方式為執(zhí)行 gcc main.c -L 靜態(tài)庫路徑 -l 庫名。或者執(zhí)行g(shù)cc main.c 路徑/整個(gè)靜態(tài)庫

動(dòng)態(tài)庫:

a、如果放在系統(tǒng)目錄下執(zhí)行方式為 gcc main.c -l庫名

b、如果沒有放在系統(tǒng)目錄下執(zhí)行方式分為兩種:

第一種:執(zhí)行 gcc main.c -L 動(dòng)態(tài)庫路徑 -l 庫名,不過這種方式在執(zhí)行可執(zhí)行程序的時(shí)候可能出現(xiàn)如下錯(cuò)誤

./a.out: error while loading shared libraries: libadd.so: cannot open shared object file: No such file or directory

解決方式:

1、在/etc/bash.bashrc文件中添加export LD_LIBRARY_PATH=$LD_LRBRARY_PATH:動(dòng)態(tài)庫的絕對(duì)路徑。后source /etc/bash.bashrc

2、在/etc/ld.so.conf.d目錄下創(chuàng)建一個(gè)以.conf為后綴的文件,在這個(gè)文件中添加上動(dòng)態(tài)庫的絕對(duì)路徑,后執(zhí)行sudo ldconfig

ldconfig命令的用途,主要是在默認(rèn)搜尋目錄(/lib和/usr/lib)以及動(dòng)態(tài)庫配置文件/etc/ld.so.conf內(nèi)所列的目錄下,搜索出可共享的動(dòng)態(tài)鏈接庫.

第二種:如果第一種的方式都配置完之后出現(xiàn)如下錯(cuò)誤

/usr/bin/ld: cannot find -laddsub

collect2: ld returned 1 exit status

這種錯(cuò)誤說明編譯器找不到需要鏈接的庫,則執(zhí)行g(shù)cc main.c 動(dòng)態(tài)庫路徑/動(dòng)態(tài)庫

上一篇:排序與排序算法

下一篇:什么是棧?

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部