技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 連接器是怎么讀懂C源程序的

連接器是怎么讀懂C源程序的

時間:2018-11-26 10:46:10來源:電子發(fā)燒友網(wǎng) 工程師曾玲

導(dǎo)語:?一個C程序可能是由多個分別編譯的部分組成,這些不同部分通過一個通常叫做鏈接器(或連接器,載入器)的程序合并成一個整體。

一個C程序可能是由多個分別編譯的部分組成,這些不同部分通過一個通常叫做鏈接器(或連接器,載入器)的程序合并成一個整體。因為編譯器一般每次只處理一個文件,所以它不能檢測出那些需要一次了解多個源程序文件才能察覺的錯誤。而且,在許多系統(tǒng)中鏈接器是獨立于C語言實現(xiàn)的,因此如果前述錯誤的原因與C語言相關(guān),鏈接器對此也同樣束手無策。某些C語言實現(xiàn)提供了一個稱為lint的程序,可以捕獲到大量的此類錯誤,但遺憾的是并非全部的C語言實現(xiàn)都提供了該程序。如果能夠找到諸如lint的程序,就一定善加利用,這一點無論怎么強調(diào)都不為過。

C語言中的一個重要思想就是分別編譯(SeparateCompilation),即若干個源程序可以在不同的時候單獨進行編譯,然后在恰當(dāng)?shù)臅r候整合到一起。但是,鏈接器一般是與C編譯器分離的,它不可能了解C語言的諸多細(xì)節(jié)。那么,鏈接器是如何做到把若干個C源程序合并成一個整體呢?盡管鏈接器并不理解C語言,然而它卻能夠理解機器語言和內(nèi)存布局。編譯器的責(zé)任就是把C源程序“翻譯”成對鏈接器有意義的形式,這樣鏈接器就能夠“讀懂”C源程序了。

典型的鏈接器把有編譯器或匯編器生成的若干個目標(biāo)模塊,整合成一個被稱為載入模塊或可執(zhí)行文件的實體,該實體能夠被操作系統(tǒng)直接執(zhí)行。其中,某些目標(biāo)模塊是直接作為輸入提供給鏈接器的;而另外一些目標(biāo)模塊則是根據(jù)鏈接過程的需要,從包括有類似printf函數(shù)的庫文件中取得的。鏈接器通常把目標(biāo)模塊看成是一組外部對象(externalobject)組成的。每個外部對象代表著機器內(nèi)存中的某個部分,并通過一個外部名稱來識別。因此,程序中的每個函數(shù)和每個外部變量,如果沒有聲明為static,就都是一個外部對象。某些C編譯器會對靜態(tài)函數(shù)和靜態(tài)變量的名稱做一定改變,將他們也作為外部對象。由于經(jīng)過了“名稱修飾”,所以他們不會與其它原程序文件中的同名函數(shù)或同名變量發(fā)生命名沖突。

大多數(shù)鏈接器都禁止同一個載入模塊中的兩個不同外部對象擁有相同的名稱。然而,在多個目標(biāo)模塊整合成一個載入模塊時,這些目標(biāo)模塊可能就包含了同名的外部對象。鏈接器的一個重要工作就是處理這類命名沖突。處理命名沖突的最簡單的方法就是干脆完全禁止。對于外部對象是函數(shù)的情形,這種做法當(dāng)然正確,一個程序如果包括兩個同名的不同函數(shù),編譯器根本就不應(yīng)該接受。而對于外部對象是變量的情形,問題就變得有些困難了。不同的鏈接器對這種情形有著不同的處理方式。

鏈接器的輸入是一組目標(biāo)模塊或者庫文件。鏈接器的輸出是一個載入模塊。鏈接器讀入目標(biāo)模塊和庫文件,同時生成載入模塊。對每個目標(biāo)模塊中的每個外部對象,鏈接器要檢查載入模塊,看是否已有同名的外部對象。如果沒有,鏈接器就將該外部對象添加到載入模塊中;如果有,鏈接器就要開始處理命名沖突。

除了外部對象之外,目標(biāo)模塊中還可能包括了對其他模塊中的外部對象的引用。例如,一個調(diào)用了函數(shù)printf的C程序所生成的目標(biāo)模塊,就包括了一個對函數(shù)printf的引用。可以推測得出,該引用指向的是一個位于某個庫文件中的外部對象。在鏈接器生成載入模塊的過程中,它必須同時記錄這些外部對象的引用。當(dāng)鏈接器讀入一個目標(biāo)模塊時,它必須解析出這個目標(biāo)模塊中定義的所有外部對象的引用,并作出標(biāo)記說明這些外部對象不再是未定義的。

一個c程序可能是由多個分別編譯的部分組成,這些不同部分通過連接器合并成一個整體。因為編譯器一般每次只處理一個文件,所以吧能檢測出那些需要一次了解多個源程序文件才能察覺的錯誤。某些c程序?qū)崿F(xiàn)提供了一個稱為lint的程序,可以捕獲大量的此類錯誤,但不是所有的都能捕獲到!

標(biāo)簽:

點贊

分享到:

上一篇:關(guān)于3大PCB布線技巧你得看看

下一篇:詳解射頻識別技術(shù)優(yōu)點

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號