linux 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解高級(jí)深入些

linux 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解高級(jí)深入些

ID:6032023

大?。?40.93 KB

頁(yè)數(shù):10頁(yè)

時(shí)間:2017-12-31

linux 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解高級(jí)深入些_第1頁(yè)
linux 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解高級(jí)深入些_第2頁(yè)
linux 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解高級(jí)深入些_第3頁(yè)
linux 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解高級(jí)深入些_第4頁(yè)
linux 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解高級(jí)深入些_第5頁(yè)
資源描述:

《linux 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解高級(jí)深入些》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)

1、技巧:Linux動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)制作及使用詳解標(biāo)準(zhǔn)庫(kù)的三種連接方式及靜態(tài)庫(kù)制作與使用方法陳魯,軟件工程師,IBM陳魯,2010年4月加入IBMCSTL。他熟悉C/C++、bat/sh、XML、Windows/Linuxmakefile、CIM。簡(jiǎn)介:?Linux應(yīng)用開(kāi)發(fā)通常要考慮三個(gè)問(wèn)題,即:1)在Linux應(yīng)用程序開(kāi)發(fā)過(guò)程中遇到過(guò)標(biāo)準(zhǔn)庫(kù)鏈接在不同Linux版本下不兼容的問(wèn)題;2)在Linux靜態(tài)庫(kù)的制作過(guò)程中發(fā)現(xiàn)有別于Windows下靜態(tài)庫(kù)的制作方法;3)在Linux應(yīng)用程序鏈接第三方庫(kù)或者其他靜態(tài)庫(kù)的時(shí)候發(fā)現(xiàn)鏈接順序的煩人問(wèn)題。本文就這三個(gè)問(wèn)題針對(duì)Lin

2、ux下標(biāo)準(zhǔn)庫(kù)鏈接和如何巧妙構(gòu)建achrive(*.a)展開(kāi)相關(guān)介紹。本文的標(biāo)簽:?應(yīng)用開(kāi)發(fā)標(biāo)記本文!發(fā)布日期:?2011年11月02日級(jí)別:?中級(jí)訪問(wèn)情況:?5826次瀏覽評(píng)論:?2?(查看?

3、?添加評(píng)論-登錄)平均分(15個(gè)評(píng)分)為本文評(píng)分兩個(gè)要知道的基本知識(shí)Linux應(yīng)用程序因?yàn)長(zhǎng)inux版本的眾多與各自獨(dú)立性,在工程制作與使用中必須熟練掌握如下兩點(diǎn)才能有效地工作和理想地運(yùn)行。1.Linux下標(biāo)準(zhǔn)庫(kù)鏈接的三種方式(全靜態(tài),半靜態(tài)(libgcc,libstdc++),全動(dòng)態(tài))及其各自利弊。2.Linux下如何巧妙構(gòu)建achrive(*.a),并且如何設(shè)置

4、鏈接選項(xiàng)來(lái)解決gcc比較特別的鏈接庫(kù)的順序問(wèn)題。三種標(biāo)準(zhǔn)庫(kù)鏈接方式選項(xiàng)及對(duì)比為了演示三種不同的標(biāo)準(zhǔn)庫(kù)鏈接方式對(duì)最終應(yīng)用程序產(chǎn)生的區(qū)別,這里用了一個(gè)經(jīng)典的示例應(yīng)用程序HelloWorld做演示,見(jiàn)清單1HelloWorld。整個(gè)工程可以在文章末尾下載。清單1.HelloWorld#include#includeusingstd::cout;usingstd::endl;intmain(intargc,char*argv[]){printf("HelloWorld!(Printedbyprintf)");cout<<"

5、HelloWorld!(Printedbycout)"<

6、hread-lrt-ldl靈活度大,能夠針對(duì)不同的標(biāo)準(zhǔn)庫(kù)采取不同的鏈接策略,從而避免不兼容問(wèn)題發(fā)生。結(jié)合了全靜態(tài)與全動(dòng)態(tài)兩種鏈接方式的優(yōu)點(diǎn)。比較難識(shí)別哪些庫(kù)容易發(fā)生不兼容問(wèn)題,目前只有依靠經(jīng)驗(yàn)積累。某些功能會(huì)因選擇的標(biāo)準(zhǔn)庫(kù)版本而喪失。上述三種標(biāo)準(zhǔn)庫(kù)鏈接方式中,比較特殊的是半靜態(tài)鏈接方式,主要在于其還需要在鏈接前增加額外的一個(gè)步驟:ln-s`g++-print-file-name=libstdc++.a`,作用是將libstdc++.a(libstdc++的靜態(tài)庫(kù))符號(hào)鏈接到本地工程鏈接目錄。-print-file-name在gcc中的解釋如下:-print

7、-file-name=Displaythefullpathtolibrary為了區(qū)分三種不同的標(biāo)準(zhǔn)庫(kù)鏈接方式對(duì)最終生成的可執(zhí)行文件的影響,本文從兩個(gè)不同的維度進(jìn)行分析比較:維度一:最終生成的可執(zhí)行文件對(duì)標(biāo)準(zhǔn)庫(kù)的依賴方式(使用ldd命令進(jìn)行分析)ldd簡(jiǎn)介:該命令用于打印出某個(gè)應(yīng)用程序或者動(dòng)態(tài)庫(kù)所依賴的動(dòng)態(tài)庫(kù)涉及語(yǔ)法:ldd[OPTION]...FILE...其他詳細(xì)說(shuō)明請(qǐng)參閱man說(shuō)明。三種標(biāo)準(zhǔn)庫(kù)鏈接方式最終產(chǎn)生的應(yīng)用程序的可執(zhí)行文件對(duì)于標(biāo)準(zhǔn)庫(kù)的依賴方式具體差異見(jiàn)圖1、圖2、圖3所示:圖1.全靜態(tài)標(biāo)準(zhǔn)庫(kù)鏈接方式圖2.全動(dòng)態(tài)標(biāo)準(zhǔn)庫(kù)鏈接方式

8、圖3.半靜態(tài)(libgcc,libstdc++)標(biāo)準(zhǔn)庫(kù)鏈接方式通過(guò)上述三圖,可以清楚的看到,當(dāng)用全靜態(tài)標(biāo)準(zhǔn)庫(kù)的鏈接方式時(shí),所生成的可執(zhí)行文件最終不依賴任何的動(dòng)態(tài)標(biāo)準(zhǔn)庫(kù),而全動(dòng)態(tài)標(biāo)準(zhǔn)庫(kù)的鏈接方式會(huì)導(dǎo)致最終應(yīng)用程序可執(zhí)行文件依賴于所有用到的標(biāo)準(zhǔn)動(dòng)態(tài)庫(kù)。區(qū)別于上述兩種方式的半靜態(tài)鏈接方式則有針對(duì)性的將libgcc和libstdc++兩個(gè)標(biāo)準(zhǔn)庫(kù)非動(dòng)態(tài)鏈接。(對(duì)比圖2與圖3,可見(jiàn)在圖3中這兩個(gè)標(biāo)準(zhǔn)庫(kù)的動(dòng)態(tài)依賴不見(jiàn)了)從實(shí)際應(yīng)用當(dāng)中發(fā)現(xiàn),最理想的標(biāo)準(zhǔn)庫(kù)鏈接方式就是半靜態(tài)鏈接,通常會(huì)選擇將libgcc與libstdc++這兩個(gè)標(biāo)準(zhǔn)庫(kù)靜態(tài)鏈接,從而避免應(yīng)用程序在不同Lin

9、ux版本間標(biāo)準(zhǔn)庫(kù)依賴不兼容的問(wèn)題發(fā)生。維度二:最終生成的可執(zhí)行文件

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。