真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

在linux中庫與頭文件的聯(lián)系是什么

本篇內(nèi)容介紹了“在linux中庫與頭文件的聯(lián)系是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的遼寧網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

在linux中庫與頭文件的聯(lián)系:頭文件中有函數(shù)的申明,庫文件實(shí)現(xiàn)函數(shù)的定義;庫中的每個(gè)函數(shù)都需要在頭文件中加以聲明。在寫程序時(shí),需要用頭文件來提供對常量的定義和對系統(tǒng)函數(shù)及庫函數(shù)調(diào)用的聲明;而庫是一組已經(jīng)編譯好的函數(shù)的集合,也就是目標(biāo)文件“.o”的集合,是按照可重用的原則編寫的,一般由一組互關(guān)聯(lián)的函數(shù)組成以執(zhí)行某項(xiàng)常見任務(wù)。

在一般應(yīng)用程序源代碼中,頭文件中有函數(shù)的申明,庫文件實(shí)現(xiàn)函數(shù)的定義;庫中的每個(gè)函數(shù)都需要在頭文件中加以聲明。

1. 頭文件

在寫程序時(shí),我們需要用頭文件來提供對常量的定義和對系統(tǒng)函數(shù)及庫函數(shù)調(diào)用的聲明,這些頭文件位于/usr/include中。這些頭文件都位于可以被編譯器自動搜索到的目錄中,如X視窗系統(tǒng)的/usr/include/X11和GNU C++的/usr/include /c++。

在調(diào)用gcc時(shí),可以使用標(biāo)志-I來包含保存在子目錄或其它非標(biāo)準(zhǔn)位置中的頭文件,例如 gcc -I/usr/openwin/include fred.c

2. 庫文件

庫是一組已經(jīng)編譯好的函數(shù)的集合,也就是目標(biāo)文件.o的集合,是按照可重用的原則編寫的,一般由一組互關(guān)聯(lián)的函數(shù)組成以執(zhí)行某項(xiàng)常見任務(wù)。

標(biāo)準(zhǔn)linux系統(tǒng)庫文件一般存儲在/lib/usr/lib目錄中。默認(rèn)情況下GCC的鏈接程序只搜索標(biāo)準(zhǔn)C語言庫,這是一個(gè)歷史遺留問題。我們必須使庫文件名遵守特定的規(guī)范并在命令行中加以指定。

庫文件總以lib開頭,然后指出這是什么庫,最后的部分.a代表靜態(tài)函數(shù)庫,.so代表共享函數(shù)庫(即windows下的DLL動態(tài)鏈接庫)。

gcc -o fred fred.c /usr/lib/libm.agcc -o fred fred.c -lm
-L標(biāo)志為鏈接器增加庫的搜索路徑,如gcc -o x11fred -L /usr/openwin/lib x11fred.c -1X11

2.1 靜態(tài)庫

靜態(tài)庫以.a結(jié)尾,也稱作歸檔文件,在生成可執(zhí)行程序時(shí),靜態(tài)庫文件就被鏈接進(jìn)去,生成的可執(zhí)行文件較大,可以脫離靜態(tài)庫文件運(yùn)行。

2.1.1 生成方法

首先創(chuàng)建兩個(gè)源文件fred.c和bill.c

在linux中庫與頭文件的聯(lián)系是什么

在linux中庫與頭文件的聯(lián)系是什么

然后用gcc -c編譯生成兩個(gè)目標(biāo)文件

在linux中庫與頭文件的聯(lián)系是什么

然后為這兩個(gè)函數(shù)編寫頭文件,進(jìn)行函數(shù)聲明

在linux中庫與頭文件的聯(lián)系是什么

然后在main函數(shù)中包含頭文件并調(diào)用其中一個(gè)庫函數(shù)

在linux中庫與頭文件的聯(lián)系是什么

然后編譯main函數(shù)并將main.o和之前生成的bill.o鏈接,可以正確執(zhí)行

在linux中庫與頭文件的聯(lián)系是什么

接下來我們生成庫文件,用ar歸檔程序創(chuàng)建歸檔文件并將目標(biāo)文件添加進(jìn)去,它可將若干單獨(dú)的文件歸并到一個(gè)大的文件中。ar crv libfoo.a bill.o fred.o 之后我們要用ranlib命令為函數(shù)庫生成一個(gè)內(nèi)容表。

在linux中庫與頭文件的聯(lián)系是什么

然后我們將庫文件和之前生成的program.o文件鏈接起來,執(zhí)行成功

在linux中庫與頭文件的聯(lián)系是什么

也可以用-l指定函數(shù)庫,并用-L指定非標(biāo)準(zhǔn)位置。

在linux中庫與頭文件的聯(lián)系是什么

我們可以用nm命令查看哪些函數(shù)被包含在目標(biāo)文件,函數(shù)庫或可執(zhí)行文件中,可用于反匯編分析。程序被創(chuàng)建時(shí)它只包含函數(shù)庫中它所實(shí)際需要的函數(shù),雖然頭文件中有所有函數(shù)的聲明,但鏈接器并不會將它們?nèi)挎溄舆M(jìn)去。

在linux中庫與頭文件的聯(lián)系是什么

在linux中庫與頭文件的聯(lián)系是什么

靜態(tài)庫Linux與Windows的比較

在linux中庫與頭文件的聯(lián)系是什么

2.2 共享庫

當(dāng)同時(shí)運(yùn)行許多應(yīng)用程序并且他們中都使用來自同一個(gè)函數(shù)庫的函數(shù)時(shí),內(nèi)存中會有同一個(gè)函數(shù)的許多副本,浪費(fèi)內(nèi)存和外存??!當(dāng)程序使用函數(shù)庫時(shí),它本身在鏈接時(shí)不再包含函數(shù)代碼,而是引用運(yùn)行時(shí)可訪問的共享代碼,當(dāng)編譯好的程序被裝載到內(nèi)存中執(zhí)行時(shí),函數(shù)引用被解析并產(chǎn)生對共享庫的調(diào)用,如果有必要,共享庫才被加載到內(nèi)存中。即系統(tǒng)可以只在內(nèi)存中保留共享庫的一份副本供許多應(yīng)用程序調(diào)用,在外存上也可只保留一份。而且共享庫的更新也可以獨(dú)立于依賴它的應(yīng)用程序,應(yīng)用程序不需再重新編譯。
在linux系統(tǒng)中,負(fù)責(zé)裝載共享庫并解析客戶程序引用的函數(shù)的程序(動態(tài)裝載器)是ld.so

2.2.1 生成方法

用中間文件bill.o fred.o生成共享庫libfoo.so gcc -shared -fpic -o libfoo.so bill.o fred.o

在linux中庫與頭文件的聯(lián)系是什么

生成了共享庫后,要置于標(biāo)準(zhǔn)搜索目錄下。搜索共享庫的額外位置可以在文件/etc/ld.so.conf中配置,修改這個(gè)文件后執(zhí)行命令ldconfig來處理。
/etc/ld.so.conf的內(nèi)容為include /etc/ld.so.conf.d/*.conf,在此目錄下建立自己的動態(tài)鏈接庫路徑配置文件mylib.conf

在linux中庫與頭文件的聯(lián)系是什么

然后指定搜索路徑

在linux中庫與頭文件的聯(lián)系是什么

鏈接生成可執(zhí)行文件gcc -o main program.o -lfoo -L.

在linux中庫與頭文件的聯(lián)系是什么

ldd工具可用來分析可執(zhí)行文件運(yùn)行所需要的共享庫

在linux中庫與頭文件的聯(lián)系是什么

也可以在編譯目標(biāo)代碼時(shí)指定.so庫的搜索路徑,通過gcc 的參數(shù)-Wl,-rpath指定,如gcc main.cpp -lfoo -L. -Wl,-rpath=.-Wl, 表示后面的參數(shù)將傳給 link 程序 ld (因?yàn)?gcc 會自動調(diào)用ld )當(dāng)指定多個(gè)動態(tài)庫搜索路徑時(shí),路徑之間用冒號 " : " 分隔。

在linux中庫與頭文件的聯(lián)系是什么

“在linux中庫與頭文件的聯(lián)系是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


分享文章:在linux中庫與頭文件的聯(lián)系是什么
當(dāng)前鏈接:http://weahome.cn/article/jjopip.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部