From 4f656c65517f4edf11948cda72a9fbef16829aaf Mon Sep 17 00:00:00 2001 From: piccihud Date: Mon, 21 Oct 2024 21:48:47 +0200 Subject: [PATCH] Appunti librerie condivise --- 101/005_grub.md | 2 +- 101/006_librerie_condivise.md | 58 +++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/101/005_grub.md b/101/005_grub.md index b8c1ea1..d42b2aa 100644 --- a/101/005_grub.md +++ b/101/005_grub.md @@ -4,7 +4,7 @@ Il primo software ad essere eseguito, ha lo scopo di caricare un kernel e conseg *GRUB* e' il bootloader piu' utilizzato. Dalla versione 2 supporta anche LiveCD ISO. -Il primo settore del disco (512 byte) e' chiamato *Mater Boot Record* (MBR) e contiene la tabella delle partizioni e anche il *codice bootstrap* (installato tra l'MBR e la prima partizione). All'accensione del computer, questo codice minimale viene caricato, eseguito e passa il controllo a un bootloader (GRUB) secondario su disco, che carichera' il SO. +Il primo settore del disco (512 byte) e' chiamato *Mater Boot Record* (MBR) e contiene la tabella delle partizioni e anche il *codice bootstrap* (installato tra l'MBR e la prima partizione). All'accensione del computer, questo codice minimale viene caricato, eseguito e passa il controllo a un bootloader (GRUB) secondario su disco, che carichera' il SO. ### Limitazioni MBR diff --git a/101/006_librerie_condivise.md b/101/006_librerie_condivise.md index e69de29..04f8e30 100644 --- a/101/006_librerie_condivise.md +++ b/101/006_librerie_condivise.md @@ -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`. \ No newline at end of file