Sebuah library adalah koleksi dari file-file objek pra kompilasi yang dapat dihubungkan ke program. Penggunaan yang paling umum dari library adalah untuk menyediakan fungsi-fungsi sistem, seperti akar kuadrat dari fungsi sqrt
dapat ditemukan di library matematika C.
Library umumnya disimpan dalam file arsip dengan ekstension *.a yang merujuk kepada library statis. Librari ini dibuat dibuat dari file-file objek dengan suatu perangkat terpisah yakni GNU archiver ar, dan digunakan oleh linker untuk menemukan referensi fungsi pada saat kompilasi. Nantinya kita akan melihat lebih jauh bagaimana membuat library dengan perintah ar
. Untuk sederhananya, hanya librari-librari statik saja yang akan kita bahas di kesempatan ini.
Library sistem standar biasanya ditemukan di direktori ‘/usr/lib’ dan ‘/lib’. Sebagai contoh, library math biasanya disimpan di file ‘/usr/lib/libm.a’ pada sistem Unix-like. Deklarasi prototipe yang berhubungaan untuk fungsi-fungsi ini diletakkan pada file header ‘/usr/include/math.h’. File standar C sendiri disimpan di ‘/usr/lib/libc.a’dan berisi fungsi-fungsi yang dispesifikasikan di dalam standar ANSI/ISO C, seperti printf — librari ini terhubung secara default ke setiap program C.
Berikut adalah contoah program yang melakukan panggilan ke fungsi eksternal sqrt
di librari math ‘libm.a’:
#include <math.h>
#include <stdio.h>
int main (void) {
double x = sqrt (2.0);
printf ("The square root of 2.0 is %f\n", x);
return 0;
}
Mencoba untuk membuat file eksekutabel dari file sumber itu saja akan membuat kompiler memberikan pesan kesalahan seperti berikut :
$ gcc -Wall calc.c -o calc
/tmp/ccbR6Ojm.o: In function `main':
/tmp/ccbR6Ojm.o(.text+0x19):
undefined reference to `sqrt'
Pesan kesalahan itu menunjukkan bahwa referensi ke fungsi sqrt
tidak dapat ditemukan tanpa librari math eksternal ‘libm.a’. Fungsi sqrt
tidak terdefinisikan di program atau di librari default ‘libc.a’, dan kompiler tidak terhubung ke file ‘libm.a’ kecuali ia dinyatakan dengan jelas. Tampak pula, sebuah file disebutkan dalam pesan kesalahan tersebut, yakni ‘/tmp/ccbR60jm.o’ . Ini adalah file objek sementara yang dibuat oleh kompiler dari file ‘calc.c’, dalam rangka melakukan proses linking.
Untuk membuat kompiler bisa terhubung ke fungsi sqrt
di program utama ‘calc.c’ kita perlu memasukkan library ‘libm.a’. Cara yang mudah tapi tidak praktis untuk melakukan hal ini adalah dengan menyatakannya di baris perintah :
$ gcc -Wall calc.c /usr/lib/libm.a -o calc
Librari ‘libm.a’ berisi file-file objek untuk semua fungsi matematika, seperti sin
, cos
, exp
, log
dan sqrt
. Linker mencari melalui file ini untuk menemukan file objek yang berisi fungsi sqrt.
Setelah file objek untuk fungsi sqrt
ditemukan, program utama dapat dihubungkan dan proses kompilasi akan berhasil membuat file eksekutabel :
$ ./calc
The square root of 2.0 is 1.414214
File eksekutabel berisi kode mesin untuk fungsi utama dan kode mesin untuk fungsi sqrt
, setelah menyalinnya dari file objek yang terkait di library ‘libm.a’.
Untuk menghindari penulisan alamat direktori yang panjang di baris perintah, kompiler menyediakan opsi short-cut -l untuk menghubungkan diri ke library. Contohnya dalam baris perintah berikut :
$ gcc -Wall calc.c -lm -o calc
sama dengan perintah sebelumnya yang menuliskan secara lengkap alamat direktori ‘/usr/lib/libm.a’.
Secara umum, opsi kompiler -lNAME
akan berupaya untuk menghubungkan file objek dengan sebuah library dengan nama ‘libNAME.a’ pada direktori library standar. Direktori tambahan dapat dispesifikasikan pada opsi di baris perintah dan variabel lingkungannya, yang akan kita bahas berikutya. Sebuah program yang besar biasanya menggunakan banyak opsi -l
untuk menghubungkan ke berbagai macam jenis library.
Bersambung …
- Serial Tutorial C (1) : Compiling Program C dan C++
- Serial Tutorial C (2) : Opsi -Wall saat Kompilasi
- Serial Tutorial C (3) : Menggabungkan beberapa file saat kompilasi
- Serial Tutorial C (4) : Kompilasi File secara independen
- Serial Tutorial C (5) : Membuat File Objek dari File Sumber
- Serial Tutorial C (6) : Membuat Eksekutable File dari File Objek
- Serial Tutorial C (7) : Mengenal Struktur Program C
- Serial Tutorial C (8) : printf format identifiers
- Serial Tutorial C (9) : Latihan 1 – Membuat Program Pemangkatan
- Serial Tutorial C (10) : Membaca Input Keyboard dengan scanf()
- Serial Tutorial C (11) : makefile sederhana
Leave a Reply