Memahami perpustakaan bersama di Linux

Memahami perpustakaan bersama di Linux

Dalam pemrograman, perpustakaan adalah bermacam-macam potongan kode yang telah dikompilasi sebelumnya yang dapat digunakan kembali dalam suatu program. Perpustakaan Menyederhanakan Kehidupan untuk Pemrogram, karena mereka menyediakan fungsi yang dapat digunakan kembali, rutinitas, kelas, struktur data, dan sebagainya (ditulis oleh programmer lain), yang dapat mereka gunakan dalam program mereka.

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

Contoh perpustakaan di Linux termasuk libc (pustaka C standar) atau Glibc (Versi GNU dari Perpustakaan C Standar), libcurl (Perpustakaan Transfer File Multiprotocol), libcrypt (Perpustakaan yang digunakan untuk enkripsi, hashing, dan pengkodean dalam C), dan banyak lagi.

Linux mendukung dua kelas perpustakaan, yaitu:

  • Perpustakaan statis - terikat pada program secara statis pada waktu kompilasi.
  • Perpustakaan Dinamis atau Bersama - dimuat saat program diluncurkan dan dimuat ke dalam memori dan mengikat terjadi pada saat berjalan.

Perpustakaan yang dinamis atau dibagikan selanjutnya dapat dikategorikan ke dalam:

  • Perpustakaan yang ditautkan secara dinamis - Di sini sebuah program ditautkan dengan perpustakaan bersama dan kernel memuat perpustakaan (jika tidak ada dalam memori) setelah eksekusi.
  • Perpustakaan yang dimuat secara dinamis - Program ini mengambil kendali penuh dengan memanggil fungsi dengan perpustakaan.

Konvensi Penamaan Perpustakaan Bersama

Perpustakaan bersama dinamai dalam dua cara: nama perpustakaan (a.k.A Soname) dan "nama file" (jalur absolut ke file mana yang menyimpan kode pustaka).

Misalnya, Soname untuk libc adalah libc.Jadi.6: Di mana lib adalah awalannya, C adalah nama deskriptif, jadi berarti objek bersama, dan 6 adalah versinya. Dan nama file -nya adalah: /lib64/libc.Jadi.6. Perhatikan bahwa Soname sebenarnya adalah tautan simbolis ke nama file.

Menemukan perpustakaan bersama di Linux

Perpustakaan bersama dimuat oleh ld.Jadi (atau ld.Jadi.X) Dan LD-Linux.Jadi (atau LD-Linux.Jadi.X) program, dimana X adalah versinya. Di linux, /lib/ld-linux.Jadi.X mencari dan memuat semua perpustakaan bersama yang digunakan oleh suatu program.

Suatu program dapat menghubungi perpustakaan menggunakan nama perpustakaan atau nama file, dan jalur perpustakaan menyimpan direktori di mana perpustakaan dapat ditemukan di sistem file. Secara default, perpustakaan berada di /usr/lokal/lib, /usr/lokal/lib64, /usr/lib Dan /usr/lib64; Perpustakaan startup sistem masuk /lib Dan /lib64. Namun, pemrogram dapat menginstal perpustakaan di lokasi khusus.

Jalur perpustakaan dapat didefinisikan /etc/ld.Jadi.conf file yang dapat Anda edit dengan editor baris perintah.

# vi /etc /ld.Jadi.conf 

Baris dalam file ini menginstruksikan kernel untuk memuat file di /etc/ld.Jadi.conf.D. Dengan cara ini, pemelihara atau pemrogram paket dapat menambahkan direktori perpustakaan khusus mereka ke daftar pencarian.

Jika Anda melihat ke /etc/ld.Jadi.conf.D direktori, Anda akan melihat .conf File untuk beberapa paket umum (kernel, mysql, dan postgresql dalam hal ini):

# ls /etc /ld.Jadi.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 

Metode di atas menetapkan jalur perpustakaan secara permanen. Untuk mengaturnya sementara, gunakan Ld_library_path Variabel lingkungan pada baris perintah. Jika Anda ingin menjaga perubahan tetap permanen, lalu tambahkan baris ini di file inisialisasi shell /etc/profile (global) atau ~/.Profil (khusus pengguna).

# Ekspor 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 perpustakaan bersama untuk file biner, Anda dapat menggunakan Utilitas LDD. Output dari ldd ada dalam bentuk:

nama perpustakaan => nama file (beberapa nilai heksadesimal) atau nama file (beberapa nilai heksadesimal) #Ini ditampilkan ketika nama perpustakaan tidak dapat dibaca 

Perintah ini menunjukkan semua dependensi perpustakaan bersama untuk perintah LS.

# ldd/usr/bin/ls atau # ldd/bin/ls 
Output sampel
 Linux-VDSO.Jadi.1 => (0x00007ffebf9c2000) libbelinux.Jadi.1 => /lib64 /libselinux.Jadi.1 (0x0000003b71e00000) Librt.Jadi.1 => /lib64 /librt.Jadi.1 (0x0000003b71600000) libcap.Jadi.2 => /lib64 /libcap.Jadi.2 (0x0000003B76A00000) LIBACL.Jadi.1 => /lib64 /libacl.Jadi.1 (0x0000003B75E00000) libc.Jadi.6 => /lib64 /libc.Jadi.6 (0x0000003B70600000) libdl.Jadi.2 => /lib64 /libdl.Jadi.2 (0x0000003B70A00000) /LIB64 /LD-LINUX-X86-64.Jadi.2 (0x0000561ABFC09000) libpthread.Jadi.0 => /lib64 /libpthread.Jadi.0 (0x0000003B70E00000) libattr.Jadi.1 => /lib64 /libattr.Jadi.1 (0x0000003B75600000) 

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

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

Ini sangat penting terutama ketika Anda baru saja menginstal perpustakaan bersama baru atau membuat sendiri, atau membuat direktori perpustakaan baru. Anda perlu menjalankan ldconfig Perintah untuk mempengaruhi perubahan.

# ldconfig atau # ldconfig -v #shows file dan direktori yang bekerja dengannya 

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

Atau, jalankan perintah berikut untuk membuat tautan simbolik dari Soname ke nama file:

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

Untuk memulai dengan membuat perpustakaan Anda sendiri, lihat panduan ini dari Proyek Dokumentasi Linux (TLDP).

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