第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

什么是C中的目標(biāo)文件?

什么是C中的目標(biāo)文件?

C
qq_花開花謝_0 2019-11-22 15:55:10
我正在閱讀有關(guān)C語言中的庫的信息,但尚未找到關(guān)于什么是目標(biāo)文件的解釋。其他任何編譯文件和目標(biāo)文件之間的真正區(qū)別是什么?如果有人能夠用人類語言進(jìn)行解釋,我將感到非常高興。
查看完整描述

3 回答

?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊

目標(biāo)文件是編譯階段的實(shí)際輸出。它主要是機(jī)器代碼,但是具有允許鏈接程序查看其中包含什么符號以及其正常工作所需的符號的信息。(作為參考,“符號”基本上是全局對象,函數(shù)等的名稱。)

鏈接器獲取所有這些目標(biāo)文件并將它們組合成一個(gè)可執(zhí)行文件(假設(shè)它可以,即:沒有任何重復(fù)或未定義的符號)。如果您不告訴他們使用命令行選項(xiàng)“僅進(jìn)行編譯”,那么很多編譯器都會(huì)為您執(zhí)行此操作(請參閱:它們自己運(yùn)行鏈接器)。(-c是常見的“僅編譯;不鏈接”選項(xiàng)。)


查看完整回答
反對 回復(fù) 2019-11-22
?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

  1. 對象文件是已編譯文件本身。兩者之間沒有區(qū)別。

  2. 通過鏈接目標(biāo)文件形成可執(zhí)行文件。

  3. 目標(biāo)文件包含可由CPU理解的低級指令。這就是為什么它也稱為機(jī)器代碼的原因。

  4. 此低級機(jī)器代碼是指令的二進(jìn)制表示形式,您也可以直接使用匯編語言編寫指令,然后使用匯編器將匯編語言代碼(以英語表示)處理為機(jī)器語言(以十六進(jìn)制表示)。

這是針對高級語言(例如C)的代碼的此過程的典型高級流程

->經(jīng)過預(yù)處理器

->提供優(yōu)化的代碼,仍然在C中

->通過編譯器

->給出匯編代碼

->經(jīng)過一個(gè)匯編程序

->以機(jī)器語言給出存儲(chǔ)在目標(biāo)文件中的代碼

->通過鏈接器

->獲取可執(zhí)行文件。

該流程可能會(huì)有一些變化,例如,大多數(shù)編譯器可以直接生成機(jī)器語言代碼,而無需通過匯編程序。同樣,他們可以為您做預(yù)處理。盡管如此,分解組成部分以更好地理解還是很不錯(cuò)的。


查看完整回答
反對 回復(fù) 2019-11-22
?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊

有3種目標(biāo)文件。


可重定位目標(biāo)文件

以可以在鏈接時(shí)與其他可重定位目標(biāo)文件組合的形式包含機(jī)器代碼,以形成可執(zhí)行目標(biāo)文件。


如果您a.c有源文件,要使用GCC創(chuàng)建其目標(biāo)文件,應(yīng)運(yùn)行: gcc a.c -c


整個(gè)過程將是:預(yù)處理器(cpp)將在ac上運(yùn)行。其輸出(仍然是源)將輸入到編譯器(cc1)中。它的輸出(匯編)將輸入到匯編器(as)中,從而產(chǎn)生relocatable object file。該文件包含目標(biāo)代碼和鏈接(和調(diào)試(如果-g使用過的話))元數(shù)據(jù),并且不能直接執(zhí)行。


共享對象文件

可重定位目標(biāo)文件的一種特殊類型,可以在加載時(shí)或運(yùn)行時(shí)動(dòng)態(tài)加載。共享庫就是這類對象的一個(gè)示例。


可執(zhí)行目標(biāo)文件

包含可以直接(通過加載程序,例如execve)加載到內(nèi)存中并隨后執(zhí)行的機(jī)器代碼。


通過多個(gè)運(yùn)行鏈接器的結(jié)果relocatable object files是executable object file。鏈接器通過將所有相同類型的輸入節(jié)(例如.data)合并到相同類型的輸出節(jié),從左至右合并了命令行中的所有輸入目標(biāo)文件。它使用symbol resolution和relocation。


獎(jiǎng)金:

鏈接時(shí)static library,將輸入對象中引用的功能復(fù)制到最終可執(zhí)行文件中。隨著dynamic libraries創(chuàng)建一個(gè)符號表代替,使一個(gè)充滿活力與圖書館的功能/全局鏈接。因此,結(jié)果是部分可執(zhí)行的目標(biāo)文件,因?yàn)樗Q于庫。如果該庫不存在,則該文件將不再執(zhí)行。


鏈接過程可以如下進(jìn)行: ld a.o -o myexecutable


命令:gcc a.c -o myexecutable將調(diào)用在點(diǎn)1和點(diǎn)3提到的所有命令(cpp-> cc1-> as-> ld 1)


1:實(shí)際上是collect2,它是ld的包裝。


分享編輯


查看完整回答
反對 回復(fù) 2019-11-22
  • 3 回答
  • 0 關(guān)注
  • 806 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號