Friday, November 24, 2006

Reverse Dependencies

Di dunia Microsoft Windows ada DLL, yang bukan singkatan dari "dan lain-lain" atau "dan lagi-lagi" (walau yang terakhir ini mungkin agak mirip dengan maksud hidup DLL itu *smile*).

DLL disitu adalah singkatan dari Dynamic Link-Library.
Yang artinya kurang lebih adalah kumpulan (pustaka/library, -red) fungsi program yang bisa digunakan oleh program-program lain.

Belakangan ini aku lagi belajar cara bikin semacam DLL itu, tapi di dunia Linux, or I should've say GNU/Linux to not upset anyone. Di dunia ini dia dikenal dengan nama shared objects (CMIIW). Tentu saja aku menggunakan bahasa C untuk membuatnya... :-)

Kalau dilihat dari sudut pandang bahasa C, sebetulnya nggak ada yang spesial tentang pembuatan shared-objects ini, satu hal yang mudah untuk diingat adalah tidak adanya fungsi main(), boleh buat beragam fungsi, asal namanya bukan main(). Ini bisa dimengerti, karena memang dia tidak akan dijalankan langsung.

Beda yang kedua adalah, pada waktu kompilasi, perintah yang digunakan agak sedikit berbeda. Kalau pakai gcc (compiler yang hebat itu!) , gunakan perintah
gcc -shared -fPIC namafile.c -o namafileoutput.so

Dengan demikian maka kumpulan fungsi kita tadi bisa diakses dari program-program lain atau bahkan dari pustaka-pustaka lainnya (detailnya agak sedikit lebih rumit, tapi ya gampangnya gitu dech).

Namun bagaimana jika kita ingin membuat pustaka kita ini dapat melihat fungsi ataupun variabel yang ada di program yang memanggil pustaka kita ini? Ini dinding yang bikin ku kepentok kemarin.

Aku coba teknik standar dalam bahasa C seperti mendeklarasikan variabel/fungsi itu dengan deklarasi extern yang artinya variabel/fungsi itu tidak dideklarasikan dalam pustaka tadi. Dan harus dicari deklarasi jelasnya dimana nanti belakangan. Namun teknik ini tidak berhasil.

Ternyata ada 1 lagi argumen di gcc yang bisa dipakai untuk mengatasi masalah ini. Argumen itu adalah argumen -rdynamic. Digunakan ketika kita mengkompilasi program yang akan memanggil pustaka kita tadi, agar variabel/fungsi-2 yang ada di program ini di eksport dan bisa diakses dari pustaka kita tadi pada saat dijalankan.

Dan masalah ini namanya adalah Reverse Dependencies. Gitu.

Capek dech.

No comments: