亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

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

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

一、什么叫做庫:

庫:二進(jìn)制的程序,能被操作系統(tǒng)載入內(nèi)存中執(zhí)行

二、Linux下的庫有兩種:靜態(tài)庫和共享庫(動(dòng)態(tài)庫),二者的不同點(diǎn)在于代碼載入的時(shí)刻不同。

A、靜態(tài)庫在程序編譯的時(shí)候并會(huì)被連接到目標(biāo)代碼中,程序運(yùn)行時(shí)將不再需要該靜態(tài)庫,因此體積較大

B、動(dòng)態(tài)庫在程序編譯的時(shí)候并不會(huì)被連接到目標(biāo)代碼中,而是在程序運(yùn)行時(shí)被載入,因此程序運(yùn)行時(shí)還需要?jiǎng)討B(tài)庫存在,因此目標(biāo)代碼體積小。

1、靜態(tài)庫的制作

A、創(chuàng)建靜態(tài)庫的源代碼 fun.c

B、將源代碼編譯成.o文件

gcc -c fun.c -o fun.o

gcc -c -o fun.o fun.c

C、將.o文件生成靜態(tài)庫

ar crs libfun.a fun.o(ar是生成靜態(tài)庫的命令,crs是選項(xiàng))

ar crs的諧音是愛人才認(rèn)識(shí)

靜態(tài)庫的命名規(guī)則:libxxx.a xxx表示庫名

D、編寫測試代碼并編譯(-L 指定路徑 –lfun指定庫)

gcc main.c -o main -lfun -L. 庫在當(dāng)前目錄

gcc -o main main.c -L. –lfun 一樣的效果

gcc main.c -o main -lfun -L.. 庫在上一級(jí)目錄

gcc main.c -o main -lfun -L ../auto_lib/ 庫在上一級(jí)目錄的auto_lib路徑下面

E、執(zhí)行 ./main

2、動(dòng)態(tài)庫的制作

A、編寫庫的源代碼 fun.c

B、將其編譯成.o文件

gcc -fPIC -Wall -c fun.c

C、將.o文件生成動(dòng)態(tài)庫

gcc -shared -fPIC -o libfun.so fun.o

D、編寫測試代碼main.c 并編譯

gcc -o main main.c -L. –lfun

備注:此時(shí)執(zhí)行的話會(huì)出現(xiàn)這樣的錯(cuò)誤提示

原因是動(dòng)態(tài)庫沒有裝載,解決這個(gè)問題有3種方法:

<1> 將制作的動(dòng)態(tài)庫放在 /lib或/usr/lib

sudo mv libfun.so /lib/

sudo mv libfun.so /usr/lib/

然后執(zhí)行./main 結(jié)果如下

<2>將制作的動(dòng)態(tài)庫的當(dāng)前路徑加入庫的配置文件中

配置文件查找當(dāng)前路徑

進(jìn)入配置文件 sudo vi /etc/ld.so.conf.d/libc.conf

添加路徑

使配置生效 sudo ldconfig

<3>將路徑加入環(huán)境變量中(此方法不靠譜)

查看環(huán)境變量中有沒有值

echo $LD_LIBRARY_PATH

在環(huán)境變量中加上庫所在的路徑

export LD_LIBRARY_PATH=/home/leo/IO/16073/auto_lib

使配置生效 sudo ldconfig

3、庫的升級(jí)(后臺(tái)修改庫,升級(jí)系統(tǒng))

<1> 修改庫的源代碼

將其編譯生成.o文件

gcc -fPIC -Wall -c fun.c

將.o文件生成動(dòng)態(tài)庫

gcc -shared -fPIC -o libfun.so fun.o

執(zhí)行 ./main 看效果

升級(jí)成功,以上這些就是靜態(tài)庫和動(dòng)態(tài)庫的知識(shí)了

附件知識(shí):

 -shared:指定生成動(dòng)態(tài)鏈接庫。

 -static:指定生成靜態(tài)鏈接庫。(創(chuàng)建靜態(tài)庫我們一般用ar命令,它將很多.o轉(zhuǎn)換成.a)

 -fPIC:表示編譯為位置獨(dú)立的代碼,用于編譯共享庫。目標(biāo)文件需要?jiǎng)?chuàng)建成位置無關(guān)碼,概念上就是在可執(zhí)行程序裝載它們的時(shí)候,它們可以放在可執(zhí)行程序的內(nèi)存里的任何地方。

 -L.:表示要連接的庫在當(dāng)前目錄中。

 -l:指定鏈接時(shí)需要的動(dòng)態(tài)庫。編譯器查找動(dòng)態(tài)連接庫時(shí)有隱含的命名規(guī)則,即在給出的名字前面加上lib,后面加上.so來確定庫的名稱。

 -Wall:生成所有警告信息。

 -ggdb:此選項(xiàng)將盡可能的生成gdb的可以使用的調(diào)試信息。

 -g:編譯器在編譯的時(shí)候產(chǎn)生調(diào)試信息。

 -c:只激活預(yù)處理、編譯和匯編,也就是把程序做成目標(biāo)文件(.o文件)。

 -Wl,options:把參數(shù)(options)傳遞給鏈接器ld。如果options中間有逗號(hào),就將options分成多個(gè)選項(xiàng),然后傳遞給鏈接程序。

上一篇:scanf函數(shù)簡單問題討論

下一篇:sqlite入門基礎(chǔ)(一):sqlite3_open,sqlite3_exec,slite3_close

熱點(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)

回到頂部

主站蜘蛛池模板: 蜜臀tv| 99久久久精品 | 99热精品久久只有精品黑人 | 欧美猛交lxxxxxxxxx | 亚洲视频在线免费看 | 亚洲天天综合色制服丝袜在线 | 久久亚洲欧美成人精品 | 青青草精品在线视频 | 欧美特黄一区二区三区 | 青娱乐91| 另类国产ts人妖系列 | 色综合久久伊人 | 日日摸夜夜添夜夜添人人爽 | 日韩18视频在线观看 | 日本69色视频在线观看 | 欧美日韩亚洲国产一区二区三区 | 夜夜澡人人爽人人喊_欧美 一本大道久久a久久综合 | 黄色三级网站免费 | 免费观看www视频 | 免费看欧美成人性色生活片 | 看黄视频软件 | 一区二区日本视频 | 狠狠色噜噜狠狠狠狠888奇米 | 麻豆免费视频网站 | 国产人妖视频 | 中文字幕有码视频 | 国产高清精品自在线看 | 午夜视频十八嗯嗯啊免费 | 国产精品21区 | 波多野结衣中文字幕一区二区三区 | 国产综合精品久久久久成人影 | 日韩大片免费观看视频播放 | 国产成人艳妇在线观看 | www.日本免费 | 欧美久久伊人 | 激情婷婷综合 | 另类国产ts人妖合集 | 国产区视频在线观看 | 人人干在线 | 99国产精品久久久久久久... | 色婷婷国产|