編譯,就是把文字形式源**翻譯為機器語言形式的目標檔案的過程。
鏈結,是把目標檔案、作業系統的啟動**和用到的庫檔案進行組織,形成最終生成可執行**的過程
編譯過程細分為預編譯、編譯、彙編三個階段
預處理階段,在正式的編譯階段之前進行。
主要是以下幾方面的處理:
預編譯程式所完成的基本上是對源程式的「替代」工作。經過此種替代,生成乙個沒有巨集定義、沒有條件編譯指令、沒有特殊符號的輸出檔案。這個檔案的含義同沒有經過預處理的原始檔是相同的,但內容有所不同。下一步,此輸出檔案將作為編譯程式的輸出而被翻譯成為機器指令。
彙編實際上指把組合語言**翻譯成目標機器指令的過程。
unix環境下主要有三種型別的目標檔案
共享的目標檔案:這種檔案存放了適合於在兩種上下文裡鏈結的**和資料。第一種是鏈結程式可把它與其它可重定位檔案及共享的目標檔案一起處理來建立另乙個 目標檔案;第二種是動態鏈結程式將它與另乙個可執行檔案及其它的共享目標檔案結合到一起,建立乙個程序映象。
(1)靜態鏈結
(2) 動態鏈結
對於可執行檔案中的函式呼叫,可分別採用動態鏈結或靜態鏈結的方法。
linux使用的gcc編譯器把以上的幾個過程進行**,使使用者只使用一次命令就把編譯工作完成。下圖是gcc**的編譯過程:
(1)預編譯
(2)編譯
(3)彙編
(4)鏈結
C C 從原始碼到可執行程式的過程
1.預處理 將巨集 條件編譯指令 標頭檔案包含等指令進行展開。也就是說,這是乙個 替換的工作。c c 原始碼經預處理後,不再存在各種巨集指令。但展開後依然是 的形式,是人可讀的。2.編譯 將c c 翻譯成彙編 然後翻譯成平台的機器 最終會生成乙個與cpp檔案同名的目標檔案,其字尾名為.o或者.obj...
程式從原始碼到可執行檔案
cmake和make ide編輯器 是用於編寫源程式的軟體,通過編輯器來編寫源程式檔案。原始檔有特定的格式,由檔案的字尾名來區分,字尾取決於使用的程式語言,如c語言編寫的是c程式檔案,其原始檔以.c為字尾 c 語言編寫的程式原始檔則以.cpp為字尾。更多時候,編輯器是面向程式設計師的,程式編輯器和普...
C 從原始碼到可執行檔案
從乙個cpp檔案到乙個exe檔案,大概經歷了以下過程 預處理 preprocessor 根據預處理命令組裝成新的c c 程式,常以i為副檔名。這個過程包括 巨集的替換 刪除注釋 處理預處理指令 如 include ifdef 編譯 complier 將得到的i檔案翻譯成彙編 即.s檔案。彙編 ass...