C語言代碼的整個編譯過程

來源:互聯網
上載者:User

1 源檔案hello.c(文本)--à前置處理器----àhello.i(文本)
前置處理器:將#include 包含的檔案內容插入該命令處,檢查全文處理#define宏定義,處理條件編譯命令 #if #endif 將不需要的code屏蔽掉,處理完畢後產生修改後的原始碼hello.i.
2 hello.i(文本)----à編譯器------àhello.s(組譯工具 文本)
編譯器:詞法分析文法分析,產生一條條的彙編語句如mov ax,bx,相當於是最佳化後的組合語言的源檔案。
3 hello.s(彙編文本)------à彙編器----àhello.o(目標檔案 二進位)
彙編器:將彙編源檔案翻譯成對應的機器指令,而且還寫入一些東西與機器指令打包成可重新置放目標程式格式的檔案hello.o
4 hello.o(目標檔案 二進位)----à連接器----àhello.exe(可執行目標檔案 二進位)
連接器:比如說hello.o裡調用了標準庫裡函數eg prinf ,連接器的工作就是找到prinf所在的目標檔案xx.o或是xx.lib然後將該程式插入到我們的hello.o中,具體來說,其細節是什麼,如何找到xx.o呢?是不是只併入用到的函數呢?

5關於hello.exe執行:在OS下運行程式時候,比如說我們double
click一個xx.exe的表徵圖,先是OS調用它一個叫做Loader載入器的函數,它讀取分析可執行檔中的相關資訊後,將其代碼和資料拷貝到
Memory中,然後進行一些操作後(?)將控制轉移到這個程式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.