1. 編輯:也就是編寫C/C++程序
2. 預處理:相當於根據預處理指令組裝新的C/C++程序。經過預處理,會產生一個沒有宏定義,沒有條件編譯指令,沒有特殊符號的輸出文件,這個文件的含義同原本的文件無異,只是內容上有所不同。
3. 編譯:將預處理完的文件進行一系列詞法分析、語法分析、語義分析及優化后,產生相應的匯編代碼文件。
4. 鏈接:通過鏈接器將一個個目標文件(或許還會有庫文件)鏈接在一起生成一個完整的可執行程序。 鏈接程序的主要工作就是將有關的目標文件彼此相連接,也就是將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標文件成為一個能夠被操作系統裝入執行的統一整體。在此過程中會發現被調用的函數未被定義。
編譯基本過程
- 預處理(中間過程)
gcc -E gdb.c -o gdb.i # 生成.i文件查看文件 執行了各種預處理操作
- 編譯(將預處理的.i文件編譯成匯編文件)
gcc -S gdb.i -o gdb.s # 生成.s文件,里面都是匯編代碼
- 匯編(將匯編代碼匯編成機器碼)
gcc -c gdb.s -o gdb.o # 生成.o文件
- 生成可執行文件
gcc gdb.o -o gdb # 生成gdb可執行文件 ./gdb # 執行gdb文件