Monday, July 13, 2015

กระบวนการ Compile ของโปรแกรม GCC

ตัวอย่าง Source Code โปรแกรมภาษา C บันทึกเป็นชื่อไฟล์ HiBKK.c
Source File <HiBKK.c>
หลังจากที่เขียนโปรแกรมและบันทึกไฟล์เรียบร้อยแล้ว กระบวนการในการ Compile ของโปรแกรม GCC จาก Source File เป็น Executable File ประกอบด้วยกระบวนการหลัก ๆ ดังนี้
  • Preprocessing
  • Syntax Check & Compilation
  • Assembly
  • Linking

1. ขั้น Preprocessing
โปรแกรม GCC จะทำการรวม header file และ Defined Macros ต่างๆ ที่ถูกระบุเข้ากับ Source Code เดิม

ในตัวอย่างระบุ #include<stdio.h> ดังนั้น stdio.h ซึ่งเป็น header file จะถูกรวมเข้ากับ Source Code เดิม กลายเป็นไฟล์ใหม่ที่เรียกว่า Preprocessed Source File ซึ่งมีนามสกุล ( .i )

คำสั่งในการสร้างไฟล์ Preprocessed Source File คือ gcc -E [file_name.c] -o [file_name.i] ในตัวอย่างใช้คำสั่ง gcc -E HiBKK.c -o HiBKK.i และภาพด้านล่างคือลักษณะของ Preprocessed Source File ที่ได้

Preprocessed Source File <HiBKK.i>
2. ขั้น Syntax Check & Compilation
โปรแกรม GCC จะทำการตรวจสอบความถูกต้องของโครงสร้างภาษา ว่าถูกต้องหรือไม่ ถ้าถูกต้องโปรแกรมจะทำการเปลี่ยน Preprocessed Source File ไปเป็นภาษา Assembly โดยไฟล์ใหม่นี้จะมีนามสกุล ( .s ) ซึ่งเป็นภาษาสุดท้ายที่มนุษย์ยังสามารถเข้าใจได้ (The Last Human Exit)

การเปลี่ยนไฟล์จาก Preprocessed Source File ไปเป็นภาษา Assembly จะใช้คำสั่ง gcc  -Wall  -S [file.i]  -o  [file.s] ในตัวอย่างใช้คำสั่ง gcc  -Wall  -S HiBKK.i  -o  HiBKK.s ภาพด้านล่างเป็นตัวอย่างของไฟล์ Assembly

Assembly File <HiBKK.s>
3. ขั้น Assembly
โปรแกรมฯ จะเปลี่ยนไฟล์ Assembly ให้กลายเป็น Machine Code ซึ่งมนุษย์ไม่สามารถอ่านออกได้ ไฟล์ใหม่นี้เรียกว่า Object File มีนามสกุล ( .o ) ถึงแม้ว่า Object File จะเป็น Machine Code แต่ก็ยังไม่สามารถทำงานได้เนื่องจากยังขาด Object Files จากระบบอีกหลายไฟล์

สำหรับคำสั่งในการเปลี่ยน Assemble Code ไปเป็น Machine Code คือ as [file.s]  -o  [file.o] ในตัวอย่างนี้ใช้คำสั่ง as HiBKK.s  -o  HiBKK.o

4. ขั้น Linking
โปรแกรมฯ จะรวม Object File ที่ได้จากขั้นตอนที่แล้ว เข้ากับ Object Files ต่างๆ ในระบบที่จำเป็นเพื่อสร้าง Executable File ที่สามารถนำไปใช้งานได้ บนระบบปฏิบัติการนั้นๆ

สำหรับคำสั่งในการรวม Object File ที่ได้เข้ากับ Object Files หรือไฟล์ระบบอื่นๆ ที่จำเป็น คือ gcc [file.o]  -o  [file] ในตัวอย่างนี้ใช้คำสั่ง gcc HiBKK.o -o HiBKK

ในการรันโปรแกรม Executable File ใช้คำสั้ง ./file ในตัวอย่างใช้ ./HiBKK

No comments:

Post a Comment