從乙個cpp檔案到乙個exe檔案,大概經歷了以下過程:
預處理(preprocessor)
根據預處理命令組裝成新的c/c++程式,常以i為副檔名。這個過程包括:巨集的替換、刪除注釋、處理預處理指令(如#include、#ifdef)。
編譯(complier)
將得到的i檔案翻譯成彙編**,即.s檔案。
彙編(assembler)
將彙編檔案翻譯成機器指令,並打包成可重定位目標程式的o檔案。該檔案是二進位制檔案,位元組編碼是機器指令。編譯器把乙個cpp編譯彙編得到目標檔案時,除了要在目標檔案裡寫入cpp裡包含的資料和**,還要至少提供3個表:
鏈結(linker)
由匯程式設計序生成的目標檔案並不能立即就被執行,其中可能還有許多沒有解決的問題。例如,某個原始檔中的函式可能引用了另乙個原始檔中定義的某個符號(如變數或函式呼叫)或程式中可能呼叫了某個庫檔案中的函式。將引用的其它o檔案併入到我們程式所在的o檔案中並進行處理,方可得到最終的可執行檔案。
鏈結器進行鏈結的時候,首先決定各個目標檔案在最終可執行檔案裡的位置。然後訪問所有目標檔案的位址重定向表,對其中記錄的位址進行重定向(即加上該編譯單元實際在可執行檔案裡的起始位址)。然後遍歷所有目標檔案的未解決符號表,並且在所有的匯出符號表裡查詢匹配的符號,並在未解決符號表中所記錄的位置上填寫實際的位址(也要加上擁有該符號定義的編譯單元實際在可執行檔案裡的起始位址)。最後把所有的目標檔案的內容寫在各自的位置上,再做一些別的工作,即得到乙個可執行檔案。
references:
內部鏈結&外部鏈結
程式從原始碼到可執行檔案
cmake和make ide編輯器 是用於編寫源程式的軟體,通過編輯器來編寫源程式檔案。原始檔有特定的格式,由檔案的字尾名來區分,字尾取決於使用的程式語言,如c語言編寫的是c程式檔案,其原始檔以.c為字尾 c 語言編寫的程式原始檔則以.cpp為字尾。更多時候,編輯器是面向程式設計師的,程式編輯器和普...
從原始碼到可執行檔案的過程
1.預處理 預處理過程主要是處理那些原始檔和標頭檔案中以 開頭的命令,預處理的規則一般如下 1.對所有的巨集定義進行替換 2.處理所有條件編譯命令 3.處理 include命令,將被包含檔案的內容插入到該命令所在的位置 4.刪除所有的注釋 和 5.新增行號和檔名標識,便於在除錯和出錯時給出具體的 位...
從原始檔到可執行檔案
建立對於問題思考的能力,培養自己的程式設計思想。原始檔 目標檔案 可執行檔案 原始檔 用偏日常化的語言進行編寫。c cpp 目標檔案 由計算機可識別的二進位制 構成,決定了程式執行的基礎。obj o 可執行檔案 可以執行為程式的檔案。exe out 過程 編譯 編譯過程包括 預處理 標頭檔案 巨集定...