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語言編譯
- 3- C語言編譯過程C語言編譯
- GCC編譯和連結過程GC編譯
- 編譯過程簡介編譯
- C語言中編譯和連結C語言編譯
- 編譯連結過程編譯
- 【C進階】20、連結過程簡介
- go語言編譯過程概述Go編譯
- 【開發語言】PHP、Java、C語言的編譯執行過程PHPJavaC語言編譯
- C語言程式碼區錯誤以及編譯過程C語言編譯
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- C語言-->(十四)結構體、巨集、編譯C語言結構體編譯
- C++ 編譯過程C++編譯
- C語言 - 條件編譯C語言編譯
- C語言基礎-C簡介C語言
- Notepad++編譯和執行C語言 (GCC)編譯C語言GC
- c語言多檔案編譯C語言編譯
- C/C++語言新增“函式過載”功能簡單介紹和使用方法C++函式
- 使用 Sublime Text 3 編譯 C 語言編譯
- C語言編譯器手機版C語言編譯
- C語言線性連結串列C語言
- 編譯過程編譯
- 一、程式語言簡介與C++C++
- C語言-GCC的簡單介紹C語言GC
- Linux 軟連結和硬連結簡介Linux
- Android-NDK-11-C語言編譯原理AndroidC語言編譯原理
- Linux下C語言編譯的問題LinuxC語言編譯
- 【C語言】linux下多檔案編譯C語言Linux編譯
- 現代編譯原理C語言描述pdf編譯原理C語言
- 自然語言處理(NLP)簡介 | NLP課程自然語言處理
- Go編譯器簡介【譯】Go編譯
- python程式碼是解釋型語言,為什麼還有編譯過程?Python編譯
- 程式的編譯和連結原理分析編譯
- CSS預編譯語言Less的用法總結CSS編譯
- 教你在 C 語言上編寫自己的協程
- Verilog 編譯指令簡介編譯
- 鵬哥C語言初識課程總結C語言
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯