GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara kerja nomor SO (objek bersama)?

Binari sendiri mengetahui versi perpustakaan bersama mana yang mereka andalkan, dan memintanya secara khusus. Anda dapat menggunakan ldd untuk menunjukkan dependensi; milikku untuk ls adalah:

$ ldd /bin/ls
    linux-gate.so.1 =>  (0xb784e000)
    librt.so.1 => /lib/librt.so.1 (0xb782c000)
    libacl.so.1 => /lib/libacl.so.1 (0xb7824000)
    libc.so.6 => /lib/libc.so.6 (0xb76dc000)
    libpthread.so.0 => /lib/libpthread.so.0 (0xb76c3000)
    /lib/ld-linux.so.2 (0xb784f000)
    libattr.so.1 => /lib/libattr.so.1 (0xb76bd000)

Seperti yang Anda lihat, ini menunjuk ke mis. libpthread.so.0 , bukan hanya libpthread.so .

Alasan tautan simbolis adalah untuk tautan. Saat Anda ingin menautkan ke libpthread.so langsung, Anda memberikan gcc bendera -lpthread , dan ditambahkan pada lib awalan dan .so akhiran secara otomatis. Anda tidak dapat memintanya untuk menambahkan .so.0 sufiks, jadi tautan simbolik mengarah ke versi terbaru lib untuk memfasilitasi itu


Angka-angka di perpustakaan bersama adalah konvensi yang digunakan di Linux untuk mengidentifikasi API perpustakaan. Biasanya formatnya adalah:

libFOO.so.MAJOR.MINOR

Dan seperti yang Anda perhatikan biasanya ada tautan simbolik dari libFOO.so ke libFOO.so.MAJOR.MINOR. ldconfig bertanggung jawab memperbarui tautan ini ke versi terbaru.

UTAMA biasanya bertambah ketika API berubah (titik masuk baru dihapus atau parameter atau tipe diubah). MINOR biasanya ditambahkan untuk rilis perbaikan bug atau saat API baru diperkenalkan tanpa merusak API yang ada.

Diskusi yang lebih luas dapat ditemukan di sini:Membedah pustaka bersama


Pustaka bersama harus diberi versi sesuai dengan skema berikut:

blah.so.X.Y.Z

dimana

  • X =rilis ABI tidak kompatibel mundur
  • Y =rilis ABI kompatibel mundur
  • Z =Perubahan internal saja - tidak ada perubahan pada ABI

Biasanya Anda hanya melihat digit pertama seperti hello.so.1 karena digit pertama adalah satu-satunya hal yang diperlukan untuk mengidentifikasi "versi" pustaka karena semua digit lainnya kompatibel dengan versi sebelumnya.

ldconfig memelihara tabel perpustakaan bersama apa yang tersedia di sistem dan di mana jalur ke perpustakaan itu ada. Anda dapat memverifikasi ini dengan menjalankan:

ldconfig -p

Saat sebuah paket dibuat untuk sesuatu seperti Red Hat, pustaka bersama yang dipanggil dalam biner akan dicari dan ditambahkan sebagai dependensi paket pada waktu pembuatan RPM. Oleh karena itu, ketika Anda pergi untuk menginstal paket, penginstal akan mencari tahu apakah hello.so.1 diinstal pada sistem dengan mencentang ldconfig .

Anda dapat melihat dependensi suatu paket dengan melakukan sesuatu seperti:

rpm -qpR hello.rpm

Sistem ini (tidak seperti Windows) memungkinkan beberapa versi dari hello.so untuk diinstal pada sistem dan digunakan oleh aplikasi yang berbeda secara bersamaan.


Linux
  1. Apa itu NGINX? Bagaimana cara kerjanya?

  2. Cara membuat Permalink WordPress berfungsi di Nginx

  3. Bagaimana Agar Uuencode Berfungsi?

  1. Bagaimana Cara Kerja Awk ‘!a[$0]++’?

  2. Bagaimana Cara Kerja Sticky Bit?

  3. Cara menginisialisasi perpustakaan bersama di Linux

  1. Bagaimana Internal Sudo Bekerja?

  2. Bagaimana Membuat Direktori Bersama Dapat Diakses Oleh Sftp?

  3. Ssh – Bagaimana Tcp-keepalive Bekerja Di Ssh?