亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C > 正文

GCC 編譯使用動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的方法

2020-01-26 16:20:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1 庫(kù)的分類(lèi)

根據(jù)鏈接時(shí)期的不同,庫(kù)又有靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)之分。

靜態(tài)庫(kù)是在鏈接階段被鏈接的(好像是廢話(huà),但事實(shí)就是這樣),所以生成的可執(zhí)行文件就不受庫(kù)的影響了,即使庫(kù)被刪除了,程序依然可以成功運(yùn)行。

有別于靜態(tài)庫(kù),動(dòng)態(tài)庫(kù)的鏈接是在程序執(zhí)行的時(shí)候被鏈接的。所以,即使程序編譯完,庫(kù)仍須保留在系統(tǒng)上,以供程序運(yùn)行時(shí)調(diào)用。(TODO:鏈接動(dòng)態(tài)庫(kù)時(shí)鏈接階段到底做了什么)

2 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的比較

鏈接靜態(tài)庫(kù)其實(shí)從某種意義上來(lái)說(shuō)也是一種粘貼復(fù)制,只不過(guò)它操作的對(duì)象是目標(biāo)代碼而不是源碼而已。因?yàn)殪o態(tài)庫(kù)被鏈接后庫(kù)就直接嵌入可執(zhí)行文件中了,這樣就帶來(lái)了兩個(gè)問(wèn)題。

首先就是系統(tǒng)空間被浪費(fèi)了。這是顯而易見(jiàn)的,想象一下,如果多個(gè)程序鏈接了同一個(gè)庫(kù),則每一個(gè)生成的可執(zhí)行文件就都會(huì)有一個(gè)庫(kù)的副本,必然會(huì)浪費(fèi)系統(tǒng)空間。

再者,人非圣賢,即使是精心調(diào)試的庫(kù),也難免會(huì)有錯(cuò)。一旦發(fā)現(xiàn)了庫(kù)中有bug,挽救起來(lái)就比較麻煩了。必須一一把鏈接該庫(kù)的程序找出來(lái),然后重新編譯。

而動(dòng)態(tài)庫(kù)的出現(xiàn)正彌補(bǔ)了靜態(tài)庫(kù)的以上弊端。因?yàn)閯?dòng)態(tài)庫(kù)是在程序運(yùn)行時(shí)被鏈接的,所以磁盤(pán)上只須保留一份副本,因此節(jié)約了磁盤(pán)空間。如果發(fā)現(xiàn)了bug或要升級(jí)也很簡(jiǎn)單,只要用新的庫(kù)把原來(lái)的替換掉就行了。

那么,是不是靜態(tài)庫(kù)就一無(wú)是處了呢?

答曰:非也非也。不是有句話(huà)么:存在即是合理。靜態(tài)庫(kù)既然沒(méi)有湮沒(méi)在滔滔的歷史長(zhǎng)河中,就必然有它的用武之地。想象一下這樣的情況:如果你用libpcap庫(kù)編了一個(gè)程序,要給被人運(yùn)行,而他的系統(tǒng)上沒(méi)有裝pcap庫(kù),該怎么解決呢?最簡(jiǎn)單的辦法就是編譯該程序時(shí)把所有要鏈接的庫(kù)都鏈接它們的靜態(tài)庫(kù),這樣,就可以在別人的系統(tǒng)上直接運(yùn)行該程序了。

所謂有得必有失,正因?yàn)閯?dòng)態(tài)庫(kù)在程序運(yùn)行時(shí)被鏈接,故程序的運(yùn)行速度和鏈接靜態(tài)庫(kù)的版本相比必然會(huì)打折扣。然而瑕不掩瑜,動(dòng)態(tài)庫(kù)的不足相對(duì)于它帶來(lái)的好處在現(xiàn)今硬件下簡(jiǎn)直是微不足道的,所以鏈接程序在鏈接時(shí)一般是優(yōu)先鏈接動(dòng)態(tài)庫(kù)的,除非用-static參數(shù)指定鏈接靜態(tài)庫(kù)。

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

1. 創(chuàng)建動(dòng)態(tài)鏈接庫(kù)

復(fù)制代碼 代碼如下:

#include<stdio.h>
void hello()
{
  printf("hello world/n");
}

用命令gcc -shared hello.c -o libhello.so編譯為動(dòng)態(tài)庫(kù)??梢钥吹?,當(dāng)前目錄下多了一個(gè)文件libhello.so。

2. 再編輯一個(gè)測(cè)試文件test.c,內(nèi)容如下

復(fù)制代碼 代碼如下:

#include<stdio.h>
int main()
{
  printf("call hello()");
  hello();
}

編譯 gcc test.c -lhello
-l 選項(xiàng)告訴編譯器要使用hello這個(gè)庫(kù)。奇怪的地方是動(dòng)態(tài)庫(kù)的名字是libhello.so,這里卻使用hello.
但這樣還不行,編譯會(huì)出錯(cuò)。

In function `main':
test.c:(.text+0x1d): undefined reference to `hello'
collect2: ld returned 1 exit status
這是因?yàn)閔ello這個(gè)庫(kù)在我們自己的路徑中,編譯器找不到。
需要使用-L選項(xiàng),告訴hello庫(kù)的位置
gcc test.c -lhello -L. -o test
-L .告訴編譯器在當(dāng)前目錄中查找?guī)煳募?/P>

3. 編譯成功后執(zhí)行./test, 仍然出錯(cuò)

說(shuō)找不到庫(kù)

有兩種方法:

一、可以把當(dāng)前路徑加入 /etc/ld.so.conf中然后運(yùn)行l(wèi)dconfig,或者以當(dāng)前路徑為參數(shù)運(yùn)行l(wèi)dconfig(要有root權(quán)限才行)。

二、把當(dāng)前路徑加入環(huán)境變量LD_LIBRARY_PATH中

當(dāng)然,如果你覺(jué)得不會(huì)引起混亂的話(huà),可以直接把該庫(kù)拷入/lib,/usr/lib/等位置(無(wú)可避免,這樣做也要有權(quán)限),這樣鏈接器和加載器就都可以準(zhǔn)確的找到該庫(kù)了。

我們采用第二種方法:
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
這樣,再執(zhí)行就成功了。

下面再講講靜態(tài)鏈接庫(kù)

仍使用剛才的hello.c和test.c。
1. gcc -c hello.c 注意這里沒(méi)有使用-shared選項(xiàng)
2. 把目標(biāo)文件歸檔    ar -r libhello.a hello.o
    程序 ar 配合參數(shù) -r 創(chuàng)建一個(gè)新庫(kù) libhello.a 并將命令行中列出的對(duì)象文件插入。采用這種方法,如果庫(kù)不存在的話(huà),參數(shù) -r 將創(chuàng)建一個(gè)新的庫(kù),而如果庫(kù)存在的話(huà),將用新的模塊替換原來(lái)的模塊。
3. 在程序中鏈接靜態(tài)庫(kù)
           gcc test.c -lhello -L. -static -o hello.static
或者   gcc test.c libhello.a -L. -o hello.static

生成的hello.static就不再依賴(lài)libhello.a了

兩個(gè)有用的命令

file程序是用來(lái)判斷文件類(lèi)型的,在file命令下,所有文件都會(huì)原形畢露的。
順便說(shuō)一個(gè)技巧。有時(shí)在 windows下用瀏覽器下載tar.gz或tar.bz2文件,后綴名會(huì)變成奇怪的tar.tar,到Linux有些新手就不知怎么解壓了。但 Linux下的文件類(lèi)型并不受文件后綴名的影響,所以我們可以先用命令file xxx.tar.tar看一下文件類(lèi)型,然后用tar加適當(dāng)?shù)膮?shù)解壓。

另外,還可以借助程序ldd實(shí)用程序來(lái)判斷。
ldd是用來(lái)打印目標(biāo)程序(由命令行參數(shù)指定)所鏈接的所有動(dòng)態(tài)庫(kù)的信息的,如果目標(biāo)程序沒(méi)有鏈接動(dòng)態(tài)庫(kù),則打印“not a dynamic executable”,ldd的用法請(qǐng)參考manpage。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

国产成人在线精品| 在线观看麻豆| jiuse.com91视频| xfplay每日更新av资源在线| 欧美亚洲大陆| 日韩精品最新在线观看| 一区二区三区免费观看视频| 亚洲国产精品成人久久蜜臀| 日本一区午夜艳熟免费| 精品人伦一区二区三区蜜桃网站| 国产一区二区丝袜| 国产精品激情av电影在线观看| 国产成人精品av在线观| 天天综合网久久综合网| 麻豆精品一区二区综合av| 91久色国产| 国产亚洲欧美激情| 欧美激情欧美激情在线五月| 日本最新不卡在线| 最美情侣韩剧在线播放| 欧美成人激情视频| 国产欧美午夜| 中文字幕人妻熟女在线| 2021av天天| 最新中文字幕一区| 日本系列欧美系列| 日韩福利一区| 岛国毛片在线播放| 看黄网站在线观看| 久久www视频| 91麻豆精品国产综合久久久| 亚洲av无一区二区三区| 宅男噜噜噜66国产日韩在线观看| 欧美激情2020午夜免费观看| 97视频在线观看视频免费视频| 丁香婷婷在线| 狠色狠色综合久久| 成人在线不卡| 美女被搞网站| 欧美第一黄网免费网站| 在线午夜精品自拍| 精品99在线| 日本免费一区二区三区| www.eeuss影院| 中文字幕日韩有码| 国产v亚洲v天堂无码久久久| 波多野结衣激情视频| 精品人妻无码中文字幕18禁| 国产91在线播放| 人人九九精品视频| 2021国产精品久久精品| 国产日韩欧美中文在线播放| 亚洲免费在线精品一区| 欧美套图亚洲一区| 337p亚洲精品色噜噜狠狠| 91精品国产福利| 99久久久国产精品免费调教网站| 欧美壮男野外gaytube| 免费一二一二在线视频| 久久久久亚洲AV成人网人人小说| 色哟哟国产精品免费观看| 影音先锋亚洲视频| 911精品美国片911久久久| 久久激情中文| 四虎精品成人免费观看| heisi视频网在线观看| 成人性生活视频免费看| 99久久精品免费看| 成年人在线网站| 国产成人无码精品久久二区三| 在线视频中文字幕一区二区| 97国产精品久久久| 成人国产亚洲欧美成人综合网| 成人免费网视频| 欧美视频在线免费播放| 九色视频在线观看免费| 日韩欧美国产成人| 国产精品美女在线观看直播| 女生裸体视频一区二区三区| 周于希免费高清在线观看| 自拍偷拍18p| 国产精品福利导航| 最新高清无码专区| 黄色网址中文字幕| 丰满熟女一区二区三区| 中文成人无字幕乱码精品区| 欧美 日韩 国产 高清| 这里只有精品久久| 中文字幕网站在线观看| 亚洲人高潮女人毛茸茸| 国产精品久久久久久超碰| 久久一区二区三区av| 成人精品国产一区二区4080| 欧美日韩亚洲三区| 久久亚洲影视婷婷| a视频免费在线观看| 美女黄色成人网| 国产无遮挡裸体免费视频| 五月综合激情| 最新日本在线观看| 免费黄色网址在线观看| 无码日韩人妻精品久久蜜桃| 日韩女优人人人人射在线视频| 久久天天躁狠狠躁夜夜爽蜜月| 九色蝌蚪性视频| 给我看免费高清在线观看| 欧美高清在线视频观看不卡| 亚洲女同二女同志奶水| 亚洲一区导航| 九七影院97影院理论片久久| 久久久久久久97| 人成网站在线观看| 俄罗斯女人裸体性做爰| 久久出品必属精品| 国产伦精品免费视频| 伊人久久大香线蕉综合网蜜芽| 欧美一区二区三区久久综合| 欧美一区二区中文字幕| 亚洲电影成人| 欧美日本在线视频| av高清不卡| 日韩成人精品| 久久久久久亚洲综合| 欧美亚洲另类在线观看| 大陆一级毛片| 精品黑人一区二区三区国语馆| 欧美日本视频一区| 成人在线电影网站| 久久99蜜桃综合影院免费观看| 性欧美高清强烈性视频| 精品国产一区二区三区四区| 欧美成年人在线观看| 久久久久亚洲av无码专区| 91热门视频在线观看| 中文字幕在线看片| 又黄又爽的视频在线观看| 大胆人体色综合| 成人av在线一区二区| 欧美国产精品va在线观看| 黄色av免费看| 久草在线免费资源站| 欧美成人aaa片一区国产精品| 波多野结衣毛片| 久久精品无码一区二区三区毛片| 日韩中文字幕一区| av激情在线| 一区二区三区网站| 国产亚洲精品熟女国产成人| 国产精品成人aaaa在线| 2022国产麻豆剧果冻传媒剧情| 看女生喷水的网站在线观看| 超碰在线免费观看97| 色999久久久精品人人澡69| 97超碰在线播放| 久久精品国产综合| 蜜桃无码一区二区三区| 国产精品91一区二区| 成年人一级黄色片| 中文字幕在线观看你懂的| 91国产在线免费观看| 香蕉视频网站入口| 精品国产31久久久久久| 国产精品一区二区三区免费观看| 亚洲欧美日韩综合| 亚洲an天堂an在线观看| 国产性猛交╳xxx乱大交| 人人玩人人添人人澡免费| 成人av福利| gogogo高清在线观看一区二区| 精品欧美国产一区二区三区不卡| 国产成人亚洲综合a∨婷婷| 久久波多野结衣| 麻豆精品蜜桃视频网站| 一级国产黄色片| 丁香五精品蜜臀久久久久99网站| 一区二区三区免费网站| 啪啪国产精品| 亚洲男人天堂2019| 少妇极品熟妇人妻无码| 欧美成人一二三| 国产美女精品在线| 国产igao激情在线入口| 亚洲欧美一区二区三区久本道91| ...av二区三区久久精品| 久久久精品五月天| 亚洲成人tv网| 中文有码在线播放| 天天色天天操天天| 黄色av一区二区三区| 人人澡人人爽| 一区二区三区在线不卡| 黄色av电影网站| 99热在线只有精品| 久久99视频精品| 精品亚洲永久免费精品| 亚洲成av人片| 99热在线看| 日本女人性视频| 精国产品一区二区三区a片| 亚洲午夜未满十八勿入免费观看全集| 国产一区二区三区视频| 欧美日韩高清一区二区三区| 国产精品成人国产乱| 免费在线性爱视频| 蜜臀av在线| 污视频在线免费| 天天干,天天操,天天射| 尤物视频..com| 黄色毛片免费| 日韩黄色一区二区| 精品香蕉视频| 中国麻豆视频| 国语对白一区二区| 中国av一区| 欧美亚洲动漫另类| 在线免费观看视频| 蜜桃视频网站在线观看| 苍井空张开腿实干12次| 欧日韩不卡视频| 717影院理论午夜伦不卡久久| 丝袜视频国产在线播放| 99久精品视频在线观看视频| 中文字幕 人妻熟女| 亚洲一二三区视频在线观看| 欧美电影免费播放| 九九热这里只有精品免费看| 精品电影在线观看| 一区二区在线中文字幕电影视频| 波多野结衣国产| 久久精品999| 蜜臀av在线播放一区二区三区| 亚洲最大成人免费视频| 欧美日韩有码| 欧美日韩精品二区| 久久久精品日韩欧美| 免费久久99精品国产自| 国产系列精品av| 亚洲精品永久免费精品| 日韩在线一区二区三区四区| 很黄很污的网站| 精品一区二区三区视频日产| 波多野结衣精品久久| 爱福利视频一区二区| 97神马电影| 亚洲mv大片欧洲mv大片| 亚洲高清999| 国产情侣自拍av| 懂色av噜噜一区二区三区av| 99riav视频一区二区| 免费在线观看黄色av| 欧美高清自拍一区| 中文字幕欧美一区二区| 国产日韩视频| 又黄又爽又色视频| 欧美va天堂在线| 69精品国产久热在线观看| abab456成人免费网址| 国产综合香蕉五月婷在线| 一区二区精彩视频| 91精品一区二区三区综合在线爱| 国产真人做爰毛片视频直播| 国产精品一区二区三区在线观| av网站在线免费播放| 午夜在线观看视频| 这里只有精品在线观看视频| 日韩三级精品电影久久久| av黄在线观看| 这里只有精品6| sihu影院永久在线影院| 国产极品一区二区| 日韩黄色免费电影| 日韩成人精品一区二区| 亚洲在线观看一区| www.爱色av.com| 欧美韩日一区二区三区| 蜜桃视频一区| 91精品国产91久久久久久青草| 可以直接看的黄色网址| 久久久久久毛片免费看| 理论电影国产精品| 久久久天堂国产精品女人| 日韩在线观看视频免费| 亚洲综合在线播放| 九色视频成人porny| 天天摸天天干天天操| 日韩精品视频在线观看视频| 国产精品网友自拍| 国内精品不卡在线| 偷拍与自拍一区| 大胆亚洲人体视频| 懂色av蜜臀av粉嫩av永久| 国产在线美女| 日韩av免费网址| 在线天堂一区av电影| 日韩av电影在线观看| 青青草av免费在线观看| 一本一道dvd在线观看免费视频| www.一区二区| 久久香蕉国产线看观看网| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲精品成人a| 极品尤物一区| 午夜无码国产理论在线| 欧美日韩亚洲不卡| 香蕉久久aⅴ一区二区三区| 亚洲aⅴ乱码精品成人区| 国产日韩三区| 日韩有码在线视频| 六月丁香综合网| 国产精品免费观看在线| 国产精品亚洲电影久久成人影院| 国产91对白刺激露脸在线观看| 99国产精品国产精品久久| 欧美在线亚洲综合一区| 国产精品久久看| 蜜桃在线一区| 亚洲精品二区| 欧美另类一区二区三区| 人人在线97| 伊人久久大香线蕉av一区| 亚洲女人天堂a在线播放| 日韩视频免费观看高清完整版| 日韩欧美国产系列| 亚洲乱码国产乱码精品精天堂| 亚洲另类色综合网站| 91精品久久久久久久久久入口| 免费a v网站| 天堂8在线天堂资源bt|