compilation include - C中的目標文件是什麼?




lib file (5)

對象代碼是代碼tat取決於功能,符號,運行機器的文本。 就像老式電傳機一樣,它需要通過電傳打字將信號發送到其他電報機。 以同樣的方式處理器需要二進制代碼來運行機器。 目標文件就像二進制代碼,但沒有鏈接。 鏈接創建額外的文件,以便用戶不必具有像c語言一樣的編譯器。 一旦目標文件與一些編譯器如c語言或vb等鏈接,用戶就可以直接打開exe文件。

我正在閱讀關於C語言的庫,但我還沒有找到關於目標文件的解釋。 其他編譯文件和目標文件之間的真正區別是什麼?
如果有人能用人類語言解釋,我會很高興。


目標文件是編譯階段的實際輸出。 它主要是機器代碼,但有信息允許鏈接器查看它中的符號以及它需要的符號才能工作。 (作為參考,“符號”基本上是全局對象,函數等的名稱)

鏈接器將所有這些目標文件合併為一個可執行文件(假設它可以,即:沒有任何重複或未定義的符號)。 如果你不告訴他們使用命令行選項進行“編譯”,許多編譯器會為你做這件事(閱讀:他們自己運行鏈接器)。 ( -c是一個常見的“只編譯;不鏈接”選項。)


  1. 一個對象文件是編譯的文件本身。 兩者沒有區別。

  2. 可執行文件通過鏈接對象文件形成。

  3. 目標文件包含CPU可以理解的低級指令。 這就是為什麼它也被稱為機器碼。

  4. 該低級機器碼是指令的二進製表示,您也可以使用彙編語言直接編寫指令,然後使用彙編程序將彙編語言代碼(用英語表示)處理為機器語言(用十六進製表示)。

以下是高級語言(如C語言)代碼的典型高級流程

- >通過預處理器

- >以優化代碼,仍在C中

- >通過編譯器

- >給出彙編代碼

- >通過彙編程序

- >以機器語言提供存儲在OBJECT FILES中的代碼

- >通過Linker

- >獲取可執行文件。

這個流程可以有一些變化,例如大多數編譯器可以直接生成機器語言代碼,而無需通過彙編程序。 同樣,他們可以為你做預處理。 不過,為了更好的理解,分散成員是很好的。


目標文件就是你編譯一個(或幾個)源文件時得到的。

它可以是完整的可執行文件或庫,也可以是中間文件。

目標文件通常包含本地代碼,鏈接器信息,調試符號等。


在將cache_size提升到更高的值(即PRAGMA cache_size=10000;之前,我不能從事務中獲得任何收益PRAGMA cache_size=10000;





c compilation linker object-files