Memahami Perpustakaan Bersama di Linux


Dalam pemrograman, perpustakaan adalah kumpulan potongan kode yang telah dikompilasi sebelumnya dan dapat digunakan kembali dalam suatu program. Perpustakaan menyederhanakan kehidupan bagi pemrogram, karena mereka menyediakan fungsi, rutinitas, kelas, struktur data yang dapat digunakan kembali, dan sebagainya (ditulis oleh pemrogram lain), yang dapat mereka gunakan dalam program mereka.

Misalnya, jika Anda membuat aplikasi yang perlu melakukan operasi matematika, Anda tidak perlu membuat fungsi matematika baru untuk itu, Anda cukup menggunakan fungsi yang ada di perpustakaan untuk bahasa pemrograman tersebut.

Contoh perpustakaan di Linux termasuk libc (perpustakaan C standar) atau Glibc (perpustakaan C standar versi GNU), libcurl (file multiprotokol perpustakaan transfer), libcrypt (perpustakaan yang digunakan untuk enkripsi, hashing, dan pengkodean dalam C), dan banyak lagi.

Linux mendukung dua kelas perpustakaan, yaitu:

  • Perpustakaan statis – terikat ke program secara statis pada waktu kompilasi.
  • Perpustakaan dinamis atau bersama – dimuat ketika program diluncurkan dan dimuat ke dalam memori dan pengikatan terjadi pada waktu proses.

Perpustakaan dinamis atau bersama selanjutnya dapat dikategorikan menjadi:

  • Perpustakaan yang terhubung secara dinamis – di sini program dihubungkan dengan perpustakaan bersama dan kernel memuat perpustakaan tersebut (jika tidak ada di memori) setelah dieksekusi.
  • Perpustakaan yang dimuat secara dinamis – program mengambil kendali penuh dengan memanggil fungsi dengan perpustakaan.

Konvensi Penamaan Perpustakaan Bersama

Pustaka bersama diberi nama dengan dua cara: nama pustaka (alias soname) dan “nama file” (jalur absolut ke file yang menyimpan kode pustaka).

Misalnya, soname untuk libc adalah libc.so.6: dengan lib sebagai awalan, c adalah nama deskriptif yang berarti objek bersama, dan 6 adalah versinya. Dan nama filenya adalah: /lib64/libc.so.6. Perhatikan bahwa soname sebenarnya adalah tautan simbolik ke nama file.

Menemukan Perpustakaan Bersama di Linux

Pustaka bersama dimuat oleh ld.so (atau ld.so.x) dan ld-linux.so (atau ld- linux.so.x), dengan x adalah versinya. Di Linux, /lib/ld-linux.so.x mencari dan memuat semua pustaka bersama yang digunakan oleh suatu program.

Suatu program dapat memanggil perpustakaan menggunakan nama perpustakaan atau nama filenya, dan jalur perpustakaan menyimpan direktori tempat perpustakaan dapat ditemukan di sistem file. Secara default, perpustakaan terletak di /usr/local/lib, /usr/local/lib64, /usr/lib dan /usr/lib64; perpustakaan startup sistem ada di /lib dan /lib64. Namun, pemrogram dapat menginstal perpustakaan di lokasi khusus.

Jalur pustaka dapat ditentukan dalam file /etc/ld.so.conf yang dapat Anda edit dengan editor baris perintah.

vi /etc/ld.so.conf 

Baris dalam file ini memerintahkan kernel untuk memuat file di /etc/ld.so.conf.d. Dengan cara ini, pengelola paket atau pemrogram dapat menambahkan direktori perpustakaan khusus mereka ke daftar pencarian.

Jika Anda melihat ke dalam direktori /etc/ld.so.conf.d, Anda akan melihat file .conf untuk beberapa paket umum (kernel, mysql, dan postgresql di kasus ini):

ls /etc/ld.so.conf.d

kernel-2.6.32-358.18.1.el6.x86_64.conf  kernel-2.6.32-696.1.1.el6.x86_64.conf  mariadb-x86_64.conf
kernel-2.6.32-642.6.2.el6.x86_64.conf   kernel-2.6.32-696.6.3.el6.x86_64.conf  postgresql-pgdg-libs.conf

Jika Anda melihat mariadb-x86_64.conf, Anda akan melihat jalur absolut ke perpustakaan paket.

cat mariadb-x86_64.conf

/usr/lib64/mysql

Cara di atas menetapkan jalur perpustakaan secara permanen. Untuk menyetelnya sementara, gunakan variabel lingkungan LD_LIBRARY_PATH pada baris perintah. Jika Anda ingin perubahan tetap permanen, tambahkan baris ini di file inisialisasi shell /etc/profile (global) atau ~/.profile (khusus pengguna).

export LD_LIBRARY_PATH=/path/to/library/file

Mengelola Perpustakaan Bersama di Linux

Sekarang mari kita lihat bagaimana menangani perpustakaan bersama. Untuk mendapatkan daftar semua dependensi pustaka bersama untuk file biner, Anda dapat menggunakan utilitas ldd. Output dari ldd berupa:

library name =>  filename (some hexadecimal value)
OR
filename (some hexadecimal value)  #this is shown when library name can’t be read

Perintah ini menunjukkan semua dependensi perpustakaan bersama untuk perintah ls.

ldd /usr/bin/ls
OR
ldd /bin/ls
Contoh Keluaran
	linux-vdso.so.1 =>  (0x00007ffebf9c2000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003b71e00000)
	librt.so.1 => /lib64/librt.so.1 (0x0000003b71600000)
	libcap.so.2 => /lib64/libcap.so.2 (0x0000003b76a00000)
	libacl.so.1 => /lib64/libacl.so.1 (0x0000003b75e00000)
	libc.so.6 => /lib64/libc.so.6 (0x0000003b70600000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000003b70a00000)
	/lib64/ld-linux-x86-64.so.2 (0x0000561abfc09000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003b70e00000)
	libattr.so.1 => /lib64/libattr.so.1 (0x0000003b75600000)

Karena perpustakaan bersama bisa ada di banyak direktori berbeda, pencarian melalui semua direktori ini ketika program diluncurkan akan sangat tidak efisien: yang merupakan salah satu kelemahan perpustakaan dinamis. Oleh karena itu digunakan mekanisme caching yang dilakukan oleh program ldconfig.

Secara default, ldconfig membaca konten /etc/ld.so.conf, membuat tautan simbolik yang sesuai di direktori tautan dinamis, dan kemudian menulis cache ke /etc/ld.so.cache yang kemudian mudah digunakan oleh program lain.

Hal ini sangat penting terutama ketika Anda baru saja menginstal perpustakaan bersama baru atau membuat perpustakaan Anda sendiri, atau membuat direktori perpustakaan baru. Anda perlu menjalankan perintah ldconfig untuk melakukan perubahan.

ldconfig
OR
ldconfig -v 	#shows files and directories it works with

Setelah membuat perpustakaan bersama, Anda perlu menginstalnya. Anda dapat memindahkannya ke salah satu direktori standar yang disebutkan di atas dan menjalankan perintah ldconfig.

Alternatifnya, jalankan perintah berikut untuk membuat tautan simbolik dari soname ke nama file:

ldconfig -n /path/to/your/shared/libraries

Untuk mulai membuat perpustakaan Anda sendiri, lihat panduan ini dari The Linux Documentation Project (TLDP).

Itu saja untuk saat ini! Pada artikel ini, kami memberi Anda pengenalan tentang perpustakaan dan menjelaskan perpustakaan bersama, serta cara mengelolanya di Linux. Jika Anda memiliki pertanyaan atau ide tambahan untuk dibagikan, gunakan formulir komentar di bawah.