GNU/Linux >> Linux Esercitazione >  >> Linux

Come funzionano i numeri SO (oggetto condiviso)?

I binari stessi sanno da quale versione di una libreria condivisa dipendono e la richiedono in modo specifico. Puoi usare ldd per mostrare le dipendenze; mio per ls sono:

$ 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)

Come puoi vedere, indica ad es. libpthread.so.0 , non solo libpthread.so .

Il motivo del collegamento simbolico è per il linker. Quando vuoi collegarti a libpthread.so direttamente, dai gcc la bandiera -lpthread , e aggiunge il lib prefisso e .so suffisso automaticamente. Non puoi dirgli di aggiungere il .so.0 suffisso, quindi il collegamento simbolico punta alla versione più recente della lib per facilitarlo


I numeri nelle librerie condivise sono convenzioni utilizzate in Linux per identificare l'API di una libreria. Tipicamente il formato è:

libFOO.so.MAJOR.MINOR

E come hai notato di solito c'è un collegamento simbolico da libFOO.so a libFOO.so.MAJOR.MINOR. ldconfig è responsabile dell'aggiornamento di questo collegamento alla versione più recente.

Il MAJOR viene in genere incrementato quando l'API cambia (i nuovi punti di ingresso vengono rimossi o i parametri o i tipi vengono modificati). Il MINOR in genere viene incrementato per i rilasci di correzione di bug o quando vengono introdotte nuove API senza interrompere le API esistenti.

Una discussione più ampia può essere trovata qui:Dissezione delle librerie condivise


Le librerie condivise dovrebbero essere versionate secondo il seguente schema:

blah.so.X.Y.Z

dove

  • X =versione ABI non compatibile con le versioni precedenti
  • Y =versione ABI retrocompatibile
  • Z =Solo modifiche interne - nessuna modifica all'ABI

In genere vedi solo la prima cifra come hello.so.1 perché la prima cifra è l'unica cosa necessaria per identificare la "versione" della libreria poiché tutte le altre cifre sono retrocompatibili.

ldconfig mantiene una tabella di quali librerie condivise sono disponibili su un sistema e dove esiste il percorso di quella libreria. Puoi verificarlo eseguendo:

ldconfig -p

Quando un pacchetto viene compilato per qualcosa come Red Hat, le librerie condivise richiamate nel file binario verranno cercate e aggiunte come dipendenze del pacchetto al momento della compilazione dell'RPM. Pertanto, quando vai ad installare il pacchetto, il programma di installazione cercherà se hello.so.1 è installato sul sistema controllando ldconfig .

Puoi vedere le dipendenze di un pacchetto facendo qualcosa come:

rpm -qpR hello.rpm

Questo sistema (a differenza di Windows) consente più versioni del hello.so da installare su un sistema ed essere utilizzato da diverse applicazioni contemporaneamente.


Linux
  1. Come far funzionare i Permalink di WordPress in Nginx

  2. Come funziona Awk '!a[$0]++'?

  3. Ssh – Come funziona Tcp-keepalive in Ssh?

  4. Come mostrare i numeri di riga in vi/vim?

  5. Che cos'è lo scambio di chiavi condivise (Come funzionano le VPN, parte 3)

Come mostrare i numeri di riga in Vim / Vi

Come installare le aggiunte guest in Virtualbox VM

Come lavorare con Ansible Provisioner in Vagrant

Come funziona la memoria di scambio in Linux?

Procedura:Introduzione alla programmazione – Programmazione orientata agli oggetti

Come mostrare i numeri di riga in Gedit