C語言編譯和連結過程簡介
C語言編譯和連結過程簡介
一、編譯過程簡介
編譯過程可以分為4部分內容組成
前處理器->編譯器->彙編器->連結器
1、前處理器
(1)、處理所有的註釋,以空格代替
(2)、講所有的#define刪除,並且展開所有的巨集定義
(3)、處理條件編譯指令#if,#ifdef、#elif,#else、#endif
(4)、處理#include,展開檔案包含
(5)、保留編譯器需要使用#pragma指令
預處理指令示例:
gcc -E file.c -o file.i
2、編譯器
(1)、對預處理檔案進行語法分析、詞法分析、語義分析
語法分析:分析表示式是否遵循語法規則
詞法分析:分析關鍵字,識別符號,立即數是否合法
語義分析:在語法分析基礎上進一步分析表示式是否合法
(2)、分析結束後進行程式碼優化生成相應的彙編程式碼檔案
編譯指令示例:
gcc -S file.i -o file.s
3、彙編器
(1)、彙編器將彙編程式碼轉變為機器可以執行的指令,也就是機器指令
(2)、每條彙編指令幾乎都對應一條機器指令
彙編指令示例:
gcc - c file.s -o file.o
二、連結過程簡介
連結是指將目標檔案最終生成可執行檔案
根據連結方式的不同,連結過程可以分為:
1、靜態連結:目標檔案直接進入可執行檔案
2、動態連結:在程式啟動後才動態載入目標檔案
連結器的意思:連結器的主要作用是把各個模組之間相互引用部分處理好,使得各個模組之間能夠正確的連結
1、靜態連結: 由連結器在連結時將庫的內容直接加入到可執行程式中
2、動態連結:
(1)、可執行程式在執行時才動態載入庫進行連線
(2)、庫的內容不會進入可執行程式
參考資料“狄泰軟體C語言進階教程”
相關文章
- C語言編譯過程簡介C語言編譯
- C語言的編譯連結執行過程C語言編譯
- C語言編譯全過程C語言編譯
- 3- C語言編譯過程C語言編譯
- gcc 從語言編譯全過程 預處理---->編譯---->彙編----->連結GC編譯
- GCC編譯和連結過程GC編譯
- 編譯、連結學習筆記(一)簡述編譯連結過程編譯筆記
- 編譯連結過程編譯
- 【C進階】20、連結過程簡介
- go語言編譯過程概述Go編譯
- C/C++預處理、編譯、連結過程【Z】C++編譯
- 【開發語言】PHP、Java、C語言的編譯執行過程PHPJavaC語言編譯
- C語言程式碼區錯誤以及編譯過程C語言編譯
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- C語言_來了解一下GCC編譯器編譯C可執行指令碼的過程C語言GC編譯指令碼
- C語言-->(十四)結構體、巨集、編譯C語言結構體編譯
- C語言編譯工具C語言編譯
- 從彙編角度分析C語言的過程呼叫C語言
- C語言基礎-C簡介C語言
- 簡要介紹編譯器工作過程的11步編譯
- C/C++編譯過程詳解C++編譯
- C語言編寫靜態連結庫及其使用C語言
- C語言-1.簡介C語言
- c語言多檔案編譯C語言編譯
- 小白說編譯原理-9-最簡單minus-c語言編譯器編譯原理C語言
- C程式編譯過程淺析C程式編譯
- 編譯C++ 程式的過程編譯C++
- C語言 連結串列排序C語言排序
- CMM編譯器和C編譯器過程呼叫實現的比較編譯
- C/C++語言新增“函式過載”功能簡單介紹和使用方法C++函式
- 使用 Sublime Text 3 編譯 C 語言編譯
- C語言編譯器手機版C語言編譯
- Notepad++編譯和執行C語言 (GCC)編譯C語言GC
- java開發C語言編譯器:為C語言提供API呼叫JavaC語言編譯API
- 小白說編譯原理-8-簡單minus-c語言編譯樹(支撐類)編譯原理C語言
- 編譯過程編譯
- C語言線性連結串列C語言
- C語言實現連結串列C語言