Memahami perpustakaan bersama di Linux

Memahami perpustakaan bersama di Linux

Dalam pengaturcaraan, perpustakaan adalah pelbagai jenis kod pra-kompilasi yang boleh digunakan semula dalam program. Perpustakaan memudahkan kehidupan untuk pengaturcara, kerana mereka menyediakan fungsi, rutin, kelas, struktur data yang boleh diguna semula, dan sebagainya (ditulis oleh pengaturcara lain), yang boleh mereka gunakan dalam program mereka.

Sebagai contoh, jika anda membina aplikasi yang perlu menjalankan operasi matematik, anda tidak perlu membuat fungsi matematik baru untuk itu, anda hanya boleh menggunakan fungsi sedia ada dalam perpustakaan untuk bahasa pengaturcaraan tersebut.

Contoh perpustakaan di Linux termasuk libc (Perpustakaan C Standard) atau Glibc (GNU versi Perpustakaan St Standard), libcurl (Perpustakaan Pemindahan Fail Multiprotokol), libcrypt (Perpustakaan yang digunakan untuk penyulitan, hashing, dan pengekodan dalam c), dan banyak lagi.

Linux menyokong dua kelas perpustakaan, iaitu:

  • Perpustakaan statik - terikat pada program secara statik pada masa penyusunan.
  • Perpustakaan dinamik atau dikongsi - dimuatkan apabila program dilancarkan dan dimuatkan ke dalam memori dan pengikatan berlaku pada masa yang dijalankan.

Perpustakaan dinamik atau dikongsi dapat dikategorikan lagi ke dalam:

  • Perpustakaan yang dikaitkan secara dinamik - Di sini program dikaitkan dengan perpustakaan yang dikongsi dan kernel memuatkan perpustakaan (sekiranya ia tidak dalam ingatan) semasa pelaksanaan.
  • Perpustakaan yang dimuat secara dinamik - Program ini mengambil kawalan penuh dengan memanggil fungsi dengan perpustakaan.

Konvensyen Penamaan Perpustakaan Berkongsi

Perpustakaan bersama dinamakan dalam dua cara: nama perpustakaan (a.k.a soname) dan "nama fail" (laluan mutlak ke fail yang menyimpan kod perpustakaan).

Contohnya, soname untuk libc adalah libc.Jadi.6: di mana lib adalah awalan, c adalah nama deskriptif, jadi bermaksud objek bersama, dan 6 adalah versi. Dan nama failnya ialah: /lib64/libc.Jadi.6. Perhatikan bahawa soname sebenarnya adalah pautan simbolik ke nama fail.

Mencari perpustakaan bersama di Linux

Perpustakaan bersama dimuatkan oleh LD.Jadi (atau LD.Jadi.x) dan LD-LINUX.Jadi (atau LD-LINUX.Jadi.x) program, di mana x adalah versi. Di Linux, /lib/ld-linux.Jadi.x carian dan memuat semua perpustakaan bersama yang digunakan oleh program.

Program boleh memanggil perpustakaan menggunakan nama perpustakaan atau nama failnya, dan Laluan Perpustakaan menyimpan direktori di mana perpustakaan boleh didapati dalam sistem fail. Secara lalai, perpustakaan terletak di /usr/local/lib, /usr/local/lib64, /usr/lib dan /usr/lib64; Perpustakaan permulaan sistem berada di /lib dan /lib64. Pengatur boleh, bagaimanapun, memasang perpustakaan di lokasi tersuai.

Laluan perpustakaan boleh ditakrifkan dalam /etc/ld.Jadi.Conf fail yang boleh anda edit dengan editor baris arahan.

# vi /etc /ld.Jadi.Conf 

Baris dalam fail ini mengarahkan kernel untuk memuatkan fail /etc/ld.Jadi.Conf.d. Dengan cara ini, penyelenggara pakej atau pengaturcara boleh menambah direktori perpustakaan tersuai mereka ke senarai carian.

Sekiranya anda melihat ke dalam /etc/ld.Jadi.Conf.d direktori, anda akan melihat .Conf Fail untuk beberapa pakej biasa (kernel, MySQL, dan PostgreSQL dalam kes 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 

Sekiranya anda melihat MariaDB-X86_64.conf, anda akan melihat jalan mutlak ke perpustakaan pakej.

# Cat MariaDB-X86_64.Conf /usr/lib64/mysql 

Kaedah di atas menetapkan laluan perpustakaan secara kekal. Untuk menetapkannya buat sementara waktu, gunakan Ld_library_path Pemboleh ubah persekitaran pada baris arahan. Sekiranya anda ingin mengekalkan perubahan yang kekal, maka tambahkan baris ini dalam fail inisialisasi shell /etc/profil (global) atau ~/.profil (khusus pengguna).

# Eksport ld_library_path =/path/to/perpustakaan/fail 

Menguruskan perpustakaan bersama di Linux

Marilah kita melihat bagaimana menangani perpustakaan bersama. Untuk mendapatkan senarai semua kebergantungan perpustakaan yang dikongsi untuk fail binari, anda boleh menggunakan Utiliti LDD. Output ldd berada dalam bentuk:

nama perpustakaan => nama fail (beberapa nilai heksadesimal) atau nama fail (beberapa nilai heksadesimal) #This ditunjukkan apabila nama perpustakaan tidak dapat dibaca 

Perintah ini menunjukkan semua kebergantungan perpustakaan bersama untuk arahan LS.

# ldd/usr/bin/ls atau # ldd/bin/ls 
Output sampel
 linux-vdso.Jadi.1 => (0x00007ffebf9c2000) libselinux.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) 

Kerana perpustakaan bersama boleh wujud di banyak direktori yang berbeza, mencari melalui semua direktori ini apabila program dilancarkan akan sangat tidak cekap: yang merupakan salah satu kemungkinan kelemahan perpustakaan dinamik. Oleh itu, mekanisme caching digunakan, dilakukan oleh program ldconfig.

Secara lalai, ldconfig membaca kandungan /etc/ld.Jadi.Conf, mewujudkan pautan simbolik yang sesuai dalam direktori pautan dinamik, dan kemudian menulis cache ke /etc/ld.Jadi.cache yang kemudiannya mudah digunakan oleh program lain.

Ini sangat penting terutamanya apabila anda baru memasang perpustakaan kongsi baru atau membuat direktori perpustakaan baru anda sendiri, atau dibuat. Anda perlu menjalankan ldconfig perintah untuk melaksanakan perubahan.

# ldconfig atau # ldconfig -v #shows fail dan direktori yang berfungsi dengan 

Setelah membuat perpustakaan bersama anda, anda perlu memasangnya. Anda boleh memindahkannya ke mana -mana direktori standard yang disebutkan di atas dan menjalankan ldconfig perintah.

Sebagai alternatif, jalankan arahan berikut untuk membuat pautan simbolik dari soname ke nama fail:

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

Untuk memulakan dengan membuat perpustakaan anda sendiri, lihat panduan ini dari Projek Dokumentasi Linux (TLDP).

Itu sahaja buat masa ini! Dalam artikel ini, kami memberi anda pengenalan kepada perpustakaan dan menjelaskan perpustakaan bersama, dan bagaimana menguruskannya di Linux. Sekiranya anda mempunyai pertanyaan atau idea tambahan untuk dikongsi, gunakan borang komen di bawah.