Appunti librerie condivise
This commit is contained in:
parent
b77d09507a
commit
4f656c6551
@ -0,0 +1,58 @@
|
||||
# Librerie condivise
|
||||
|
||||
Raccolte di codice che possono essere riutilizzate da altri programmi. In base a come il *linker* collega le librerie ai vari file oggetto (codice macchina generato dal compilatore), si hanno due tipi di librerie.
|
||||
|
||||
## Librerie statiche
|
||||
|
||||
Una libreria statica viene unita al programma. Una copia del codice della libreria e' inglobata nel programma e ne diventa parte. Non ha quindi dipendenze esterne.
|
||||
|
||||
## Librerie dinamiche (o condivise)
|
||||
|
||||
Il *linker* si occupa solamente che il programma faccia riferimento alle librerie. In fase di esecuzione, la libreria deve essere disponibile per soddisfare le dipendenze del programma.
|
||||
|
||||
## Denominazione
|
||||
|
||||
Il nome di una libreria dinamica/condivisa, o *soname*, segue la seguente nomenclatura:
|
||||
|
||||
- nome della libreria, preceduto da *lib*
|
||||
- so (*share object*)
|
||||
- numero di versione. I nomi delle librerie statiche terminano con *.a*
|
||||
|
||||
Ad esempio: libthread.so.0 oppure libthread.so.a
|
||||
|
||||
## Posizione nel filesystem
|
||||
|
||||
- `/lib`
|
||||
- `/lib32`
|
||||
- `/lib64`
|
||||
- `/usr/lib`
|
||||
- `/usr/local/lib`
|
||||
|
||||
### Configurazione dei percorsi delle librerie condivise
|
||||
|
||||
Quando un programma viene eseguito, il linker dinamico ricerca le librerie in una serie di directory, in particolare `/etc/ld.so.conf.d/` e nel file `/etc/ld.so.conf`, che semplicemente include tutti i file .conf presenti nella cartella sopra indicata:
|
||||
|
||||
```bash
|
||||
cat /etc/ld.so.conf
|
||||
|
||||
include /etc/ld.so.conf.d/*.conf
|
||||
```
|
||||
La directory `/etc/ld.so.conf.d/` contiene una serie di file .conf che indicano i percorsi assoluti delle directory che contengono le librerie condivise.
|
||||
|
||||
Il comando `ldconfig` si occupa della lettura di questi file di configurazione e della creazione dei vari link simbolici. Deve quindi essere eseguito ogni volta che vengono aggiunti o aggiornati dei file di configurazione.
|
||||
|
||||
La variabile `LD_LIBRARY_PATH` puo' essere usata per aggiungere temporaneamente dei percorsi alle librerie condivise.
|
||||
|
||||
```bash
|
||||
LD_LIBRARY_PATH=/usr/local/mylib
|
||||
|
||||
export LD_LIBRARY_PATH # Aggiunge /usr/local/mylib al percorso delle librerie condivise per la shell corrente e lo esporta a tutti i processi figli L'aggiunta al file ~/.bashrc o /etc/bash rende la libreria persistente
|
||||
|
||||
unset LD_LIBRARY_PATH # Rimuove la variabile d'ambiente
|
||||
```
|
||||
|
||||
> Il comando `export` esporta il valore di una variabile d'ambiente anche alle shell figlie.
|
||||
|
||||
### Ricerca delle dipendenze
|
||||
|
||||
Per la ricerca delle dipendenze, usare il comando `ldd` seguito dal percorso assoluto del programma. Ad esempio: `ldd /usr/bin/git`.
|
Loading…
x
Reference in New Issue
Block a user