Membuat Static Library - Unix Programming

May 21, 2016 9:19 AM

              ,,    ,,  ,,      
  .g8"""bgd `7MM    db *MM      
.dP'     `M   MM        MM      
dM'       `   MM  `7MM  MM,dMMb.
MM            MM    MM  MM    `Mb
MM.mmmmm      MM    MM  MM     M8
`Mb.     ,'   MM    MM  MM.   ,M9
  `"bmmmd'  .JMML..JMML.P^YbmdP'


Tidak sulit untuk membuat static dan shared library. Static library adalah file-file objek .o yang diproduksi oleh kompiler setelah kompilasi. Kompiler melakukan linking dari kode yang dikompile ke file-file objek di direktori yang sama dengan file-file tersebut, hal itu sama halnya dengan kompiler melakukan linking ke library standar. 

 Berikut ini adalah konstruksi static library sederhana berupa dua buah file yang bernama lib1.c dan lib2.c:
/* file: lib1.c */
#include
void lib1_mesg() {
printf (“Hellow it’s from lib1.\n”);
}

/* file: lib2.c */
#include
void lib2_mesg() {
printf (“Hellow it’s from lib2.\n”);
}

Kedua file tersebut dapat dikompile secara bersamaan untuk membentuk file objek .o, seperti langkah berikut:

% cc -Wall -Werror -c lib1.c lib2.c
% ls *.o
lib1.o lib2.o

Dalam membuat static library, kita membutuhkan tool yang bernama ar. Ingat bahwa nama lain dari static library adalah archive, dan utility yang digunakan untuk mengatur isi di dalam archive adalah ar. Ar dapat digunakan dengan menggunakan opsi -r untuk membuat library baru dan akan menambahkan nama objek module ke archive. Berikut ini pembentukan file library libmessg.a yang berisi dua objek module lib1.o dan lib2.o:

% ar -r libmessg.a lib1.o lib2.o
ar: creating libmessg.a
% ls *.a
libmessg.a

Static library sudah lengkap dan siap digunakan. Di bawah ini adalah file utama yang akan memanggil kedua library di atas.

/* file: my_messg.c */
#include
#include

void lib1_mesg(void);
void lib2_mesg(void);
int main(argc, argv)
int argc; char **argv;
{
printf (“Program utama my_messg.\n”);
printf (“==>Call lib1.\n”);
lib1_mesg();
printf (“==>Call lib2.\n”);
lib2_mesg();
printf (“==>End call\n”);
return (EXIT_SUCCESS);
}

File utama my_messg.c dapat dikompile dan di-link secara bersamaan di dalam satu instruksi berikut:

% cc -Wall -Werror my_messg.c libmessg.a -o mymessg
% ./mymessg
Program utama my_messg.
==>Call lib1.
Hellow it’s from lib1.
==>Call lib2.
Hellow it’s from lib2.
==>End call

Sebagaimana telah dijelaskan di sub bab sebelumnya, tentang penggunaan library ketika kompilasi menggunakan opsi -l. Kompilasi di atas juga bisa menggunakan opsi -l untuk menyertakan library. Ini adalah sistem konvensi penamaan yang mengijinkan penggunaan nama yang lebih pendek.

% cc my_messg.c -Wall -Werror \
-L/home/31337/book_wardi/writing\ cracking\ code/kode/ \
-lmessg -o mymessg
% ./mymessg
Program utama my_messg.
==>Call lib1.
Hellow it’s from lib1.
==>Call lib2.
Hellow it’s from lib2.
==>End call

Library messg yang disebutkan dengan -lmessg adalah file libmessg.a yang lokasinya berada di /home/31337/book_wardi/writing\ cracking\ code/kode.

0 comments:

Article list :