Proses Kompilasi GCC (GCC Compilation Process)
Compiler adalah sebuah program yang dibuat untuk membaca sebuah sumber program yang ditulis dalam bahasa tertentu (source language: misalnya bahasa pemrograman C) dan menerjemahkannya ke dalam bahasa lainnya (target language: misalnya bahasa Assembly).
Bagaimana sebuah program dapat dieksekusi dan dapat dilihat hasilnya? Salah satu komponennya adalah Compiler, namun disamping itu ada juga Pre-processor, Assembler, dan Linker. Tahapan dari sistem tersebut adalah sebagai berikut:
Beberapa fungsi dari pre-processor diantaranya adalah macro processing dan file inclusion. Pada awalnya program yang dibuat oleh programmer akan diolah oleh pre-processor dan hasilnya akan dibaca oleh compiler untuk dihasilkan ke target program. Jika target program yang dibuat adalah Assembly language, maka proses berikutnya adalah assembler yang akan bertugas untuk membaca file assembly tersebut dan mengubahnya ke dalam bentuk relocatable machine code. Linker akan mengubah file relocatable machine code tersebut kedalam absolute machine yang dapat dieksuksi dan menampilkan hasil dari program tersebut.
Untuk memberikan gambaran proses tersebut maka kita dapat melihat contoh berikut ini. Misalkan kita memiliki sebuah file bernama “Hello.c” yang berisi program sederhana dalam bahasa pemrograman C.
Untuk memanggil compiler maka kita dapat menggunakan perintah $gcc -S Hello.c dimana GCC adalah kepanjangan dari GNU Compiler Collection.
Dapat dilihat pada gambar 3, pada awalnya di directory ~/Projects/CompilerExample hanya ada file Hello.c. Setelah dilakukan kompilasi maka akan dihasilkan sebuah file assembly, dimana dalam contoh ini file yang dihasilkan adalah Hello.s. Contoh file assembly yang dihasilkan dapat dilihat pada gambar 4.
Berikutnya kita akan memanggil assembler untuk membaca file assembly tersebut dan menghasilkan file rellocatable machine code. Instruksi yang dapat digunakan adalah $as Hello.s -o Hello.o
Hasil dari assembler disimpan ke dalam file bernama Hello.o dimana file ini berisi binary file yang tidak dapat dibaca. Untuk menghasilkan sebuah file yang dapat dieksekusi maka hasil binary file tersebut akan diproses oleh linker/loader dengan menggunakan instruksi $gcc Hello.o -o Hello . Jika dilihat pada gambar 6, setelah linker dijalankan maka akan muncul sebuah executable file bernama Hello. Untuk melakukan eksekusi pada file tersebut maka dapat digunakan perintah ./Hello seperti yang terlihat pada gambar 6.
References:
Aho, A.V., Ravi, S., & Ullman, J.D. (2007). Compiler: Principle, techniques and tools. @nd. Addison-Wesley. New York.