{"id":3630,"date":"2026-07-16T13:03:48","date_gmt":"2026-07-16T11:03:48","guid":{"rendered":"https:\/\/rootmail.it\/courses\/lpic-1-exam-101-010-160-corso-completo-in-italiano\/lessons\/102-3-gestire-le-librerie-condivise\/"},"modified":"2026-07-20T21:55:51","modified_gmt":"2026-07-20T19:55:51","slug":"102-3-gestire-le-librerie-condivise","status":"publish","type":"lesson","link":"https:\/\/rootmail.it\/en\/courses\/lpic-1-exam-1-101-500-corso-completo-in-italiano\/lessons\/102-3-gestire-le-librerie-condivise\/","title":{"rendered":"102.3 Gestire le librerie condivise"},"content":{"rendered":"<h2>102.3 Gestire le librerie condivise<\/h2>\n<p>Le <strong>librerie condivise<\/strong> rappresentano uno dei pilastri del funzionamento dei moderni sistemi Linux. Consentono a pi\u00f9 programmi di utilizzare lo stesso codice, riducendo lo spazio occupato su disco, ottimizzando l&#8217;utilizzo della memoria e semplificando gli aggiornamenti del software. Grazie a questo meccanismo, le applicazioni possono condividere funzionalit\u00e0 comuni senza dover incorporare copie identiche delle stesse librerie.<\/p>\n<p>Per garantire che ogni programma trovi le librerie di cui ha bisogno, Linux utilizza il <strong>linker dinamico<\/strong>, un componente che individua e carica automaticamente le librerie richieste al momento dell&#8217;esecuzione. Comprendere il funzionamento del linker e delle librerie condivise \u00e8 una competenza fondamentale per installare software, risolvere problemi di dipendenze e amministrare correttamente un sistema Linux.<\/p>\n<p>In questa lezione scoprirai come funzionano le librerie condivise, come il sistema ricerca e carica le dipendenze delle applicazioni e quali strumenti utilizzare per verificare, configurare e diagnosticare eventuali problemi legati alle librerie di sistema.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> La gestione delle librerie condivise \u00e8 un argomento frequentemente presente nell&#8217;esame LPIC-1 Exam 101. \u00c8 importante conoscere il ruolo del linker dinamico, il funzionamento di <code>ld.so<\/code>, i file di configurazione <code>\/etc\/ld.so.conf<\/code> e <code>\/etc\/ld.so.cache<\/code>, oltre ai principali comandi come <code>ldd<\/code> e <code>ldconfig<\/code>.<\/p><\/blockquote>\n<hr \/>\n<h2>\ud83c\udfaf Obiettivi della lezione<\/h2>\n<p>Al termine di questa lezione sarai in grado di:<\/p>\n<ul>\n<li>comprendere cosa sono le librerie condivise e perch\u00e9 vengono utilizzate;<\/li>\n<li>descrivere il funzionamento del linker dinamico durante l&#8217;avvio di un&#8217;applicazione;<\/li>\n<li>comprendere come Linux ricerca e carica le librerie condivise;<\/li>\n<li>utilizzare i principali strumenti per verificare le dipendenze di un programma;<\/li>\n<li>aggiornare la cache delle librerie condivise e comprenderne il funzionamento;<\/li>\n<li>diagnosticare i principali problemi legati alle librerie mancanti o non raggiungibili.<\/li>\n<\/ul>\n<hr \/>\n<h2>Argomenti trattati<\/h2>\n<ul>\n<li>Le librerie condivise e il linker dinamico.<\/li>\n<li>Ricerca e caricamento delle librerie.<\/li>\n<li>Configurazione del linker dinamico.<\/li>\n<li>Cache delle librerie condivise.<\/li>\n<li>Verifica delle dipendenze delle applicazioni.<\/li>\n<li>Diagnostica e gestione delle librerie di sistema.<\/li>\n<\/ul>\n<h2>102.3.1 Comprendere le librerie condivise<\/h2>\n<p>Le <strong>librerie condivise<\/strong> rappresentano uno dei meccanismi pi\u00f9 importanti utilizzati dai sistemi operativi Linux per ottimizzare l&#8217;esecuzione delle applicazioni. Invece di includere all&#8217;interno di ogni programma tutto il codice necessario al suo funzionamento, molte funzionalit\u00e0 comuni vengono raccolte in file separati che possono essere utilizzati contemporaneamente da pi\u00f9 applicazioni.<\/p>\n<p>Questo approccio consente di ridurre lo spazio occupato su disco, diminuire il consumo di memoria e semplificare l&#8217;aggiornamento del software, poich\u00e9 una singola libreria pu\u00f2 essere condivisa da decine o centinaia di programmi.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante conoscere cosa sono le librerie condivise, riconoscere i file con estensione <code>.so<\/code> (Shared Object) e comprenderne i principali vantaggi rispetto alle librerie statiche.<\/p><\/blockquote>\n<hr \/>\n<h3>Cosa sono le librerie condivise?<\/h3>\n<p>Una <strong>libreria condivisa<\/strong> \u00e8 un file contenente funzioni e codice eseguibile che possono essere utilizzati contemporaneamente da pi\u00f9 programmi.<\/p>\n<p>Nei sistemi Linux queste librerie sono generalmente identificate dall&#8217;estensione:<\/p>\n<pre><code>.so\r\n<\/code><\/pre>\n<p>dove <strong>SO<\/strong> significa <strong>Shared Object<\/strong>.<\/p>\n<p>Alcuni esempi comuni sono:<\/p>\n<pre><code>\r\nlibc.so.6\r\nlibm.so.6\r\nlibpthread.so.0\r\nlibssl.so\r\n<\/code><\/pre>\n<p>Ogni volta che un&#8217;applicazione viene avviata, il sistema verifica quali librerie sono necessarie e le carica automaticamente in memoria tramite il linker dinamico.<\/p>\n<hr \/>\n<h3>Perch\u00e9 utilizzare librerie condivise?<\/h3>\n<p>L&#8217;utilizzo delle librerie condivise offre numerosi vantaggi rispetto all&#8217;inclusione dello stesso codice in ogni programma.<\/p>\n<p>Tra i principali benefici troviamo:<\/p>\n<ul>\n<li>riduzione dello spazio occupato su disco;<\/li>\n<li>minore utilizzo della memoria RAM, poich\u00e9 una sola copia della libreria pu\u00f2 essere condivisa tra pi\u00f9 processi;<\/li>\n<li>aggiornamenti pi\u00f9 semplici, in quanto \u00e8 sufficiente aggiornare una singola libreria anzich\u00e9 tutte le applicazioni che la utilizzano;<\/li>\n<li>maggiore facilit\u00e0 di manutenzione e correzione dei bug.<\/li>\n<\/ul>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> Una singola libreria condivisa pu\u00f2 essere caricata una sola volta in memoria e utilizzata contemporaneamente da numerosi programmi.<\/p><\/blockquote>\n<hr \/>\n<h3>Come funziona il caricamento delle librerie<\/h3>\n<p>Quando un programma viene eseguito, il suo codice non contiene necessariamente tutte le funzioni di cui ha bisogno.<\/p>\n<p>Il processo avviene generalmente in questo modo:<\/p>\n<ol>\n<li>l&#8217;utente avvia un&#8217;applicazione;<\/li>\n<li>il linker dinamico analizza le librerie richieste;<\/li>\n<li>le librerie vengono cercate nelle directory di sistema;<\/li>\n<li>le librerie vengono caricate in memoria;<\/li>\n<li>l&#8217;applicazione pu\u00f2 iniziare l&#8217;esecuzione.<\/li>\n<\/ol>\n<p>Questo meccanismo \u00e8 completamente trasparente per l&#8217;utente e avviene ogni volta che viene eseguito un programma collegato dinamicamente.<\/p>\n<hr \/>\n<h3>Librerie condivise e librerie statiche<\/h3>\n<p>Esistono due principali modalit\u00e0 di collegamento delle librerie:<\/p>\n<table>\n<thead>\n<tr>\n<th>Librerie condivise<\/th>\n<th>Librerie statiche<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Caricate al momento dell&#8217;esecuzione.<\/td>\n<td>Incorporate direttamente nell&#8217;eseguibile.<\/td>\n<\/tr>\n<tr>\n<td>Estensione <code>.so<\/code>.<\/td>\n<td>Estensione <code>.a<\/code>.<\/td>\n<\/tr>\n<tr>\n<td>Riduzione dello spazio occupato.<\/td>\n<td>Eseguibili generalmente pi\u00f9 grandi.<\/td>\n<\/tr>\n<tr>\n<td>Una sola copia pu\u00f2 essere condivisa tra pi\u00f9 processi.<\/td>\n<td>Ogni programma contiene una propria copia del codice.<\/td>\n<\/tr>\n<tr>\n<td>Aggiornamento centralizzato delle librerie.<\/td>\n<td>Ogni applicazione deve essere ricompilata per utilizzare una nuova versione.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Nei sistemi Linux moderni la maggior parte delle applicazioni utilizza il collegamento dinamico e quindi le librerie condivise.<\/p>\n<hr \/>\n<h3>Esempio pratico<\/h3>\n<p>Supponiamo di avere due programmi che utilizzano funzioni matematiche.<\/p>\n<p>Entrambi potranno utilizzare la stessa libreria:<\/p>\n<pre><code>libm.so.6\r\n<\/code><\/pre>\n<p>In questo modo il sistema mantiene una sola copia della libreria in memoria, condividendola tra i due programmi e riducendo il consumo complessivo delle risorse.<\/p>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Quando installi nuovi software, evita di sostituire manualmente le librerie condivise di sistema. Utilizza sempre il gestore di pacchetti della tua distribuzione, che si occupa di installare versioni compatibili e mantenere correttamente le dipendenze tra le applicazioni.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li>Le librerie condivise sono file <code>.so<\/code> (Shared Object).<\/li>\n<li>Consentono a pi\u00f9 programmi di utilizzare lo stesso codice.<\/li>\n<li>Ridimensionano l&#8217;occupazione su disco e il consumo di memoria.<\/li>\n<li>Vengono caricate automaticamente dal linker dinamico durante l&#8217;esecuzione dei programmi.<\/li>\n<li>Costituiscono il metodo di collegamento pi\u00f9 utilizzato nei moderni sistemi Linux.<\/li>\n<\/ul>\n<h2>102.3.2 Identificare le librerie condivise<\/h2>\n<p>Quando un&#8217;applicazione viene eseguita, il sistema deve individuare tutte le librerie condivise necessarie al suo funzionamento. In caso di librerie mancanti o incompatibili, il programma potrebbe non avviarsi oppure generare messaggi di errore.<\/p>\n<p>Linux mette a disposizione diversi strumenti per analizzare le dipendenze di un eseguibile. Il pi\u00f9 utilizzato \u00e8 <code>ldd<\/code>, che permette di visualizzare l&#8217;elenco completo delle librerie condivise richieste da un programma e il percorso dal quale vengono caricate.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Il comando <code>ldd<\/code> \u00e8 uno degli strumenti pi\u00f9 richiesti nell&#8217;esame LPIC-1. Ricorda che serve a visualizzare le dipendenze dinamiche di un eseguibile e ad individuare eventuali librerie mancanti.<\/p><\/blockquote>\n<hr \/>\n<h3>Il comando ldd<\/h3>\n<p>Il comando <code>ldd<\/code> (List Dynamic Dependencies) mostra tutte le librerie condivise utilizzate da un programma.<\/p>\n<p>La sintassi \u00e8 molto semplice:<\/p>\n<pre><code>ldd &lt;eseguibile&gt;\r\n<\/code><\/pre>\n<p>Ad esempio:<\/p>\n<pre><code>$ ldd \/bin\/ls\r\n<\/code><\/pre>\n<p>L&#8217;output potrebbe essere simile al seguente:<\/p>\n<pre><code>\r\nlinux-vdso.so.1\r\nlibselinux.so.1 =&gt; \/lib\/x86_64-linux-gnu\/libselinux.so.1\r\nlibc.so.6 =&gt; \/lib\/x86_64-linux-gnu\/libc.so.6\r\nlibpcre2-8.so.0 =&gt; \/lib\/x86_64-linux-gnu\/libpcre2-8.so.0\r\n\/lib64\/ld-linux-x86-64.so.2\r\n<\/code><\/pre>\n<p>Ogni riga rappresenta una libreria condivisa necessaria all&#8217;esecuzione del programma.<\/p>\n<hr \/>\n<h3>Interpretare l&#8217;output<\/h3>\n<p>L&#8217;output di <code>ldd<\/code> contiene generalmente tre informazioni:<\/p>\n<ul>\n<li>il nome della libreria richiesta;<\/li>\n<li>il percorso della libreria presente sul sistema;<\/li>\n<li>l&#8217;indirizzo di memoria utilizzato durante l&#8217;esecuzione.<\/li>\n<\/ul>\n<p>Ad esempio:<\/p>\n<pre><code>libc.so.6 =&gt; \/lib\/x86_64-linux-gnu\/libc.so.6\r\n<\/code><\/pre>\n<p>indica che il programma utilizza la libreria standard del linguaggio C, situata nella directory indicata.<\/p>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> Se una libreria non viene trovata, <code>ldd<\/code> mostrer\u00e0 la dicitura <strong>not found<\/strong>, indicando che il programma potrebbe non essere eseguibile.<\/p><\/blockquote>\n<hr \/>\n<h3>Individuare librerie mancanti<\/h3>\n<p>Uno degli utilizzi principali di <code>ldd<\/code> consiste nell&#8217;identificare dipendenze non soddisfatte.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>\r\nlibexample.so.1 =&gt; not found\r\n<\/code><\/pre>\n<p>Questo significa che il linker dinamico non \u00e8 riuscito a trovare la libreria richiesta.<\/p>\n<p>Le cause pi\u00f9 comuni sono:<\/p>\n<ul>\n<li>la libreria non \u00e8 installata;<\/li>\n<li>la libreria \u00e8 presente ma si trova in una directory non configurata;<\/li>\n<li>la cache delle librerie non \u00e8 aggiornata;<\/li>\n<li>\u00e8 stata installata una versione incompatibile della libreria.<\/li>\n<\/ul>\n<p>In questi casi sar\u00e0 necessario installare la libreria corretta oppure aggiornare la configurazione del linker dinamico.<\/p>\n<hr \/>\n<h3>Quando utilizzare ldd<\/h3>\n<p>Il comando <code>ldd<\/code> \u00e8 particolarmente utile per:<\/p>\n<ul>\n<li>verificare le dipendenze di un&#8217;applicazione;<\/li>\n<li>diagnosticare errori dovuti a librerie mancanti;<\/li>\n<li>controllare quale versione di una libreria viene utilizzata;<\/li>\n<li>analizzare il funzionamento di programmi installati manualmente.<\/li>\n<\/ul>\n<p>\u00c8 uno degli strumenti fondamentali per l&#8217;amministrazione dei sistemi Linux.<\/p>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Utilizza <code>ldd<\/code> quando un programma non si avvia correttamente o restituisce errori relativi alle librerie condivise. Verifica sempre che tutte le dipendenze siano presenti prima di modificare manualmente le directory delle librerie o la configurazione del linker dinamico.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li><code>ldd<\/code> visualizza le librerie condivise richieste da un eseguibile.<\/li>\n<li>Mostra il percorso da cui ogni libreria viene caricata.<\/li>\n<li>Permette di individuare rapidamente eventuali librerie mancanti.<\/li>\n<li>\u00c8 uno degli strumenti principali per diagnosticare problemi di dipendenze.<\/li>\n<li>Costituisce un comando fondamentale per l&#8217;amministrazione dei sistemi Linux.<\/li>\n<\/ul>\n<h2>102.3.3 Posizioni tipiche delle librerie di sistema<\/h2>\n<p>Per poter eseguire correttamente un&#8217;applicazione, il linker dinamico deve sapere dove cercare le librerie condivise richieste. Linux utilizza una serie di directory standard nelle quali vengono installate la maggior parte delle librerie di sistema.<\/p>\n<p>Conoscere queste posizioni \u00e8 importante sia per comprendere il funzionamento del sistema sia per diagnosticare eventuali problemi dovuti a librerie mancanti o installate in percorsi non corretti.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante ricordare che le librerie condivise vengono normalmente installate nelle directory <code>\/lib<\/code>, <code>\/lib64<\/code>, <code>\/usr\/lib<\/code> e <code>\/usr\/lib64<\/code>, a seconda dell&#8217;architettura del sistema.<\/p><\/blockquote>\n<hr \/>\n<h3>Le directory standard<\/h3>\n<p>Le principali directory utilizzate per memorizzare le librerie condivise sono:<\/p>\n<table>\n<thead>\n<tr>\n<th>Directory<\/th>\n<th>Contenuto<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>\/lib<\/code><\/td>\n<td>Librerie essenziali necessarie durante le prime fasi dell&#8217;avvio del sistema.<\/td>\n<\/tr>\n<tr>\n<td><code>\/lib64<\/code><\/td>\n<td>Versione a 64 bit delle librerie essenziali (nei sistemi che la utilizzano).<\/td>\n<\/tr>\n<tr>\n<td><code>\/usr\/lib<\/code><\/td>\n<td>Librerie utilizzate dalla maggior parte delle applicazioni installate.<\/td>\n<\/tr>\n<tr>\n<td><code>\/usr\/lib64<\/code><\/td>\n<td>Librerie a 64 bit delle applicazioni installate.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Queste directory rappresentano i percorsi standard utilizzati dal linker dinamico per individuare le librerie condivise.<\/p>\n<hr \/>\n<h3>Qual \u00e8 la differenza tra \/lib e \/usr\/lib?<\/h3>\n<p>Storicamente, la directory <code>\/lib<\/code> contiene le librerie indispensabili per l&#8217;avvio del sistema operativo e per l&#8217;esecuzione dei programmi essenziali.<\/p>\n<p>La directory <code>\/usr\/lib<\/code>, invece, ospita le librerie utilizzate dalle applicazioni installate successivamente e da gran parte del software disponibile nel sistema.<\/p>\n<p>Nelle distribuzioni Linux moderne questa distinzione \u00e8 meno evidente rispetto al passato, ma continua a essere importante conoscere il ruolo storico di entrambe le directory.<\/p>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> Le librerie presenti in <code>\/lib<\/code> sono generalmente necessarie gi\u00e0 durante il processo di avvio del sistema, mentre quelle in <code>\/usr\/lib<\/code> vengono utilizzate principalmente dalle applicazioni installate.<\/p><\/blockquote>\n<hr \/>\n<h3>Sistemi a 64 bit<\/h3>\n<p>Nei sistemi a 64 bit possono essere presenti anche le directory:<\/p>\n<pre><code>\r\n\/lib64\r\n\/usr\/lib64\r\n<\/code><\/pre>\n<p>Queste contengono le versioni delle librerie compilate per architetture a 64 bit.<\/p>\n<p>Alcune distribuzioni utilizzano invece directory multiarch, ad esempio:<\/p>\n<pre><code>\r\n\/lib\/x86_64-linux-gnu\r\n\/usr\/lib\/x86_64-linux-gnu\r\n<\/code><\/pre>\n<p>Questa organizzazione permette di installare contemporaneamente librerie per architetture differenti sullo stesso sistema.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Nota<\/strong> I percorsi possono variare leggermente da una distribuzione all&#8217;altra, ma il principio rimane lo stesso: il linker dinamico ricerca le librerie nelle directory configurate dal sistema.<\/p><\/blockquote>\n<hr \/>\n<h3>Perch\u00e9 conoscere queste directory?<\/h3>\n<p>Sapere dove vengono installate le librerie \u00e8 utile per:<\/p>\n<ul>\n<li>verificare la presenza di una libreria condivisa;<\/li>\n<li>comprendere l&#8217;output del comando <code>ldd<\/code>;<\/li>\n<li>diagnosticare errori di dipendenze;<\/li>\n<li>configurare correttamente nuove librerie installate manualmente.<\/li>\n<\/ul>\n<p>Queste directory vengono inoltre utilizzate dal comando <code>ldconfig<\/code> per creare la cache delle librerie condivise.<\/p>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Evita di copiare manualmente librerie di sistema all&#8217;interno delle directory standard. Quando possibile utilizza sempre il gestore di pacchetti della distribuzione, che installa automaticamente le librerie nei percorsi corretti e aggiorna la cache del linker dinamico.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li>Le librerie condivise vengono normalmente installate nelle directory <code>\/lib<\/code>, <code>\/usr\/lib<\/code>, <code>\/lib64<\/code> e <code>\/usr\/lib64<\/code>.<\/li>\n<li>La directory <code>\/lib<\/code> contiene le librerie essenziali per il funzionamento del sistema.<\/li>\n<li><code>\/usr\/lib<\/code> ospita la maggior parte delle librerie utilizzate dalle applicazioni.<\/li>\n<li>Nei sistemi moderni possono essere presenti directory specifiche per l&#8217;architettura, come <code>\/lib\/x86_64-linux-gnu<\/code>.<\/li>\n<li>Conoscere queste directory facilita la diagnosi dei problemi legati alle librerie condivise.<\/li>\n<\/ul>\n<h2>102.3.4 Caricare le librerie condivise<\/h2>\n<p>Quando un&#8217;applicazione viene eseguita, il sistema operativo deve individuare e caricare tutte le librerie condivise necessarie al suo funzionamento. Questa operazione viene svolta automaticamente dal <strong>linker dinamico<\/strong>, un componente fondamentale di Linux che ricerca le librerie nei percorsi configurati e le collega all&#8217;eseguibile prima dell&#8217;avvio del programma.<\/p>\n<p>Comprendere il funzionamento del linker dinamico \u00e8 essenziale per diagnosticare problemi di dipendenze, installare nuove librerie e amministrare correttamente un sistema Linux.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante conoscere il ruolo del <strong>linker dinamico<\/strong>, il comando <code>ldconfig<\/code>, il file <code>\/etc\/ld.so.conf<\/code>, la cache <code>\/etc\/ld.so.cache<\/code> e la variabile d&#8217;ambiente <code>LD_LIBRARY_PATH<\/code>.<\/p><\/blockquote>\n<hr \/>\n<h3>Il linker dinamico<\/h3>\n<p>Il <strong>linker dinamico<\/strong> (Dynamic Linker) \u00e8 il componente incaricato di individuare e caricare le librerie condivise richieste da un programma.<\/p>\n<p>Quando viene avviato un eseguibile collegato dinamicamente, il linker:<\/p>\n<ol>\n<li>analizza le librerie richieste dal programma;<\/li>\n<li>ricerca ciascuna libreria nei percorsi configurati;<\/li>\n<li>carica le librerie in memoria;<\/li>\n<li>collega il programma alle funzioni contenute nelle librerie;<\/li>\n<li>trasferisce il controllo all&#8217;applicazione.<\/li>\n<\/ol>\n<p>Questo processo avviene automaticamente e normalmente \u00e8 completamente trasparente per l&#8217;utente.<\/p>\n<hr \/>\n<h3>Dove il linker ricerca le librerie<\/h3>\n<p>Per trovare una libreria condivisa, il linker dinamico utilizza diversi percorsi.<\/p>\n<p>Tra i principali troviamo:<\/p>\n<ul>\n<li>le directory standard di sistema (<code>\/lib<\/code>, <code>\/usr\/lib<\/code>, <code>\/lib64<\/code>, <code>\/usr\/lib64<\/code>);<\/li>\n<li>le directory specificate nel file <code>\/etc\/ld.so.conf<\/code>;<\/li>\n<li>la cache delle librerie (<code>\/etc\/ld.so.cache<\/code>);<\/li>\n<li>le directory indicate nella variabile d&#8217;ambiente <code>LD_LIBRARY_PATH<\/code>.<\/li>\n<\/ul>\n<p>Questa sequenza permette al sistema di individuare rapidamente la versione corretta di ogni libreria.<\/p>\n<hr \/>\n<h3>Il file \/etc\/ld.so.conf<\/h3>\n<p>Il file:<\/p>\n<pre><code>\/etc\/ld.so.conf\r\n<\/code><\/pre>\n<p>contiene l&#8217;elenco delle directory aggiuntive che il linker dinamico deve utilizzare durante la ricerca delle librerie condivise.<\/p>\n<p>Molte distribuzioni Linux includono inoltre una directory dedicata:<\/p>\n<pre><code>\/etc\/ld.so.conf.d\/\r\n<\/code><\/pre>\n<p>che contiene file di configurazione separati per i vari pacchetti installati.<\/p>\n<p>Questa organizzazione rende pi\u00f9 semplice aggiungere nuove directory senza modificare direttamente il file principale.<\/p>\n<hr \/>\n<h3>La cache delle librerie<\/h3>\n<p>Per evitare di scandire ogni volta tutte le directory disponibili, Linux mantiene una cache delle librerie condivise.<\/p>\n<p>Questa cache \u00e8 memorizzata nel file:<\/p>\n<pre><code>\/etc\/ld.so.cache\r\n<\/code><\/pre>\n<p>Quando un programma viene avviato, il linker consulta questa cache per individuare rapidamente la posizione delle librerie richieste, migliorando le prestazioni del sistema.<\/p>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> La cache non contiene le librerie, ma soltanto un elenco dei loro percorsi all&#8217;interno del sistema.<\/p><\/blockquote>\n<hr \/>\n<h3>Il comando ldconfig<\/h3>\n<p>Il comando:<\/p>\n<pre><code>sudo ldconfig\r\n<\/code><\/pre>\n<p>aggiorna la cache delle librerie condivise.<\/p>\n<p>Durante l&#8217;esecuzione, <code>ldconfig<\/code>:<\/p>\n<ul>\n<li>scansiona le directory configurate;<\/li>\n<li>verifica la presenza delle librerie;<\/li>\n<li>aggiorna il file <code>\/etc\/ld.so.cache<\/code>;<\/li>\n<li>crea gli eventuali collegamenti simbolici necessari.<\/li>\n<\/ul>\n<p>\u00c8 buona pratica eseguire <code>ldconfig<\/code> dopo aver installato manualmente nuove librerie condivise.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>sudo ldconfig\r\n<\/code><\/pre>\n<hr \/>\n<h3>La variabile LD_LIBRARY_PATH<\/h3>\n<p>In alcune situazioni \u00e8 necessario indicare al linker dinamico directory aggiuntive nelle quali ricercare le librerie.<\/p>\n<p>Per questo scopo viene utilizzata la variabile d&#8217;ambiente:<\/p>\n<pre><code>LD_LIBRARY_PATH\r\n<\/code><\/pre>\n<p>Il suo valore consiste in un elenco di directory separate dal carattere <code>:<\/code>.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>export LD_LIBRARY_PATH=\/custom\/library\/path:$LD_LIBRARY_PATH\r\n<\/code><\/pre>\n<p>In questo esempio il linker cercher\u00e0 prima le librerie presenti nella directory:<\/p>\n<pre><code>\/custom\/library\/path\r\n<\/code><\/pre>\n<p>e successivamente continuer\u00e0 la ricerca nelle altre directory gi\u00e0 configurate.<\/p>\n<blockquote><p><strong>\u26a0\ufe0f Attenzione<\/strong> L&#8217;utilizzo di <code>LD_LIBRARY_PATH<\/code> \u00e8 utile durante lo sviluppo e i test delle applicazioni, ma nei sistemi di produzione \u00e8 generalmente preferibile configurare correttamente il linker tramite <code>\/etc\/ld.so.conf<\/code> e aggiornare la cache con <code>ldconfig<\/code>.<\/p><\/blockquote>\n<hr \/>\n<h3>Schema del processo di caricamento<\/h3>\n<pre><code>\r\nApplicazione\r\n      \u2502\r\n      \u25bc\r\nLinker dinamico (ld.so)\r\n      \u2502\r\n      \u251c\u2500\u2500\u25ba LD_LIBRARY_PATH\r\n      \u2502\r\n      \u251c\u2500\u2500\u25ba \/etc\/ld.so.cache\r\n      \u2502\r\n      \u251c\u2500\u2500\u25ba \/etc\/ld.so.conf\r\n      \u2502\r\n      \u2514\u2500\u2500\u25ba \/lib \/usr\/lib \/lib64 \/usr\/lib64\r\n                \u2502\r\n                \u25bc\r\n      Librerie condivise (.so)\r\n<\/code><\/pre>\n<p>Questo schema riassume il percorso seguito dal linker dinamico per individuare le librerie necessarie all&#8217;esecuzione di un programma.<\/p>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Quando installi nuove librerie condivise utilizza, se possibile, il gestore di pacchetti della distribuzione. Se installi manualmente una libreria in una directory personalizzata, aggiungi il percorso a <code>\/etc\/ld.so.conf<\/code> (o a un file in <code>\/etc\/ld.so.conf.d\/<\/code>) e aggiorna la cache con <code>ldconfig<\/code>. Evita di affidarti permanentemente alla variabile <code>LD_LIBRARY_PATH<\/code>, che dovrebbe essere utilizzata principalmente per attivit\u00e0 di sviluppo e test.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li>Il linker dinamico individua e carica automaticamente le librerie condivise richieste dai programmi.<\/li>\n<li>I percorsi delle librerie possono essere definiti tramite <code>\/etc\/ld.so.conf<\/code>.<\/li>\n<li>La cache <code>\/etc\/ld.so.cache<\/code> velocizza la ricerca delle librerie.<\/li>\n<li>Il comando <code>ldconfig<\/code> aggiorna la cache e crea i collegamenti necessari.<\/li>\n<li>La variabile <code>LD_LIBRARY_PATH<\/code> permette di aggiungere temporaneamente directory di ricerca per il linker dinamico.<\/li>\n<\/ul>\n<h2>102.3.5 Gestire le librerie condivise in percorsi personalizzati<\/h2>\n<p>Nella maggior parte dei sistemi Linux le librerie condivise vengono installate automaticamente nelle directory standard del sistema e il linker dinamico \u00e8 in grado di individuarle senza alcuna configurazione aggiuntiva.<\/p>\n<p>In alcuni scenari, tuttavia, pu\u00f2 essere necessario installare librerie in percorsi personalizzati, ad esempio durante lo sviluppo di applicazioni, l&#8217;installazione di software compilato manualmente o la gestione di ambienti dedicati.<\/p>\n<p>In questi casi \u00e8 importante sapere come configurare correttamente il sistema affinch\u00e9 il linker dinamico possa individuare le nuove librerie.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante sapere che, se una libreria viene installata in una directory non standard, \u00e8 possibile utilizzare temporaneamente <code>LD_LIBRARY_PATH<\/code> oppure aggiungere il percorso a <code>\/etc\/ld.so.conf<\/code> ed eseguire <code>ldconfig<\/code>.<\/p><\/blockquote>\n<hr \/>\n<h3>Librerie installate in directory personalizzate<\/h3>\n<p>Le librerie condivise vengono normalmente installate nelle directory standard del sistema.<\/p>\n<p>Talvolta, per\u00f2, un amministratore pu\u00f2 scegliere di installarle in percorsi differenti, ad esempio:<\/p>\n<pre><code>\r\n\/opt\/miaapp\/lib\r\n\/usr\/local\/lib\r\n\/home\/developer\/libs\r\n<\/code><\/pre>\n<p>Poich\u00e9 queste directory potrebbero non essere incluse tra quelle utilizzate dal linker dinamico, il sistema potrebbe non riuscire a trovare le librerie richieste dalle applicazioni.<\/p>\n<hr \/>\n<h3>Configurare il linker dinamico<\/h3>\n<p>Quando una libreria viene installata in un percorso non standard, esistono due possibili soluzioni.<\/p>\n<h4>Soluzione temporanea<\/h4>\n<p>\u00c8 possibile utilizzare la variabile d&#8217;ambiente:<\/p>\n<pre><code>LD_LIBRARY_PATH\r\n<\/code><\/pre>\n<p>Ad esempio:<\/p>\n<pre><code>export LD_LIBRARY_PATH=\/opt\/miaapp\/lib:$LD_LIBRARY_PATH\r\n<\/code><\/pre>\n<p>Questa modifica ha effetto soltanto per la sessione corrente (oppure per l&#8217;ambiente nel quale viene definita).<\/p>\n<hr \/>\n<h4>Soluzione permanente<\/h4>\n<p>Per rendere disponibile una nuova directory in modo permanente \u00e8 consigliabile aggiungerla al file:<\/p>\n<pre><code>\/etc\/ld.so.conf\r\n<\/code><\/pre>\n<p>oppure creare un nuovo file nella directory:<\/p>\n<pre><code>\/etc\/ld.so.conf.d\/\r\n<\/code><\/pre>\n<p>Successivamente sar\u00e0 necessario aggiornare la cache delle librerie:<\/p>\n<pre><code>sudo ldconfig\r\n<\/code><\/pre>\n<p>Questa \u00e8 la soluzione generalmente adottata nei sistemi di produzione.<\/p>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> Dopo aver modificato <code>\/etc\/ld.so.conf<\/code> \u00e8 necessario eseguire <code>ldconfig<\/code> affinch\u00e9 il linker dinamico aggiorni la cache delle librerie.<\/p><\/blockquote>\n<hr \/>\n<h3>Diagnosticare una libreria mancante<\/h3>\n<p>Se un&#8217;applicazione non riesce ad avviarsi a causa di una libreria condivisa non trovata, il primo strumento da utilizzare \u00e8:<\/p>\n<pre><code>ldd\r\n<\/code><\/pre>\n<p>Ad esempio:<\/p>\n<pre><code>ldd \/percorso\/del\/program\r\n<\/code><\/pre>\n<p>Se una libreria risulta mancante, l&#8217;output mostrer\u00e0:<\/p>\n<pre><code>libexample.so =&gt; not found\r\n<\/code><\/pre>\n<p>A questo punto \u00e8 possibile:<\/p>\n<ul>\n<li>installare la libreria mancante;<\/li>\n<li>verificare che il percorso della libreria sia configurato correttamente;<\/li>\n<li>aggiornare la cache con <code>ldconfig<\/code>;<\/li>\n<li>utilizzare temporaneamente <code>LD_LIBRARY_PATH<\/code>.<\/li>\n<\/ul>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Nei sistemi di produzione \u00e8 preferibile evitare l&#8217;utilizzo permanente della variabile <code>LD_LIBRARY_PATH<\/code>. La soluzione consigliata consiste nell&#8217;installare le librerie nelle directory standard oppure aggiungere il percorso a <code>\/etc\/ld.so.conf<\/code> e aggiornare la cache mediante <code>ldconfig<\/code>.<\/p>\n<p>Utilizza <code>LD_LIBRARY_PATH<\/code> principalmente durante lo sviluppo, il testing o per eseguire temporaneamente applicazioni che utilizzano librerie non ancora installate nel sistema.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li>Le librerie installate in directory non standard potrebbero non essere individuate automaticamente dal linker dinamico.<\/li>\n<li><code>LD_LIBRARY_PATH<\/code> permette di aggiungere temporaneamente nuovi percorsi di ricerca.<\/li>\n<li><code>\/etc\/ld.so.conf<\/code> consente di configurare percorsi permanenti.<\/li>\n<li>Dopo aver modificato la configurazione \u00e8 necessario eseguire <code>ldconfig<\/code>.<\/li>\n<li><code>ldd<\/code> \u00e8 il principale strumento per individuare librerie mancanti.<\/li>\n<\/ul>\n<h2>\ud83d\udcda Riepilogo della lezione<\/h2>\n<p>In questa lezione hai approfondito il funzionamento delle <strong>librerie condivise<\/strong>, uno dei meccanismi fondamentali utilizzati dai sistemi Linux per ottimizzare l&#8217;esecuzione delle applicazioni e ridurre l&#8217;occupazione di memoria e spazio su disco. Hai compreso come il linker dinamico individua e carica le librerie necessarie all&#8217;avvio di un programma e quali strumenti utilizzare per verificarne le dipendenze e risolvere eventuali problemi.<\/p>\n<p>Hai inoltre imparato a riconoscere le principali directory che ospitano le librerie condivise, a utilizzare i file di configurazione del linker dinamico e ad aggiornare la cache delle librerie di sistema.<\/p>\n<h3>Concetti principali<\/h3>\n<ul>\n<li>Hai compreso cosa sono le <strong>librerie condivise<\/strong> e quali vantaggi offrono rispetto alle librerie statiche.<\/li>\n<li>Hai imparato il ruolo del <strong>linker dinamico<\/strong> durante l&#8217;esecuzione delle applicazioni.<\/li>\n<li>Hai utilizzato il comando <code>ldd<\/code> per verificare le dipendenze dinamiche di un programma.<\/li>\n<li>Hai conosciuto le principali directory che ospitano le librerie condivise, come <code>\/lib<\/code>, <code>\/usr\/lib<\/code>, <code>\/lib64<\/code> e <code>\/usr\/lib64<\/code>.<\/li>\n<li>Hai compreso il ruolo del file <code>\/etc\/ld.so.conf<\/code> e della directory <code>\/etc\/ld.so.conf.d\/<\/code>.<\/li>\n<li>Hai imparato a utilizzare <code>ldconfig<\/code> per aggiornare la cache delle librerie condivise.<\/li>\n<li>Hai scoperto come utilizzare la variabile d&#8217;ambiente <code>LD_LIBRARY_PATH<\/code> per aggiungere temporaneamente percorsi di ricerca personalizzati.<\/li>\n<li>Hai acquisito gli strumenti necessari per diagnosticare e risolvere i principali problemi legati alle librerie condivise.<\/li>\n<\/ul>\n<blockquote><p><strong>\ud83c\udfaf Obiettivo raggiunto<\/strong> Al termine di questa lezione sei in grado di comprendere il funzionamento delle librerie condivise, verificare le dipendenze delle applicazioni, configurare il linker dinamico e risolvere i principali problemi legati al caricamento delle librerie di sistema.<\/p><\/blockquote>\n<h3>Comandi e concetti da ricordare<\/h3>\n<table>\n<thead>\n<tr>\n<th>Comando \/ Concetto<\/th>\n<th>Descrizione<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>ldd<\/code><\/td>\n<td>Visualizza le librerie condivise richieste da un eseguibile.<\/td>\n<\/tr>\n<tr>\n<td><code>ldconfig<\/code><\/td>\n<td>Aggiorna la cache delle librerie condivise e crea i collegamenti necessari.<\/td>\n<\/tr>\n<tr>\n<td><code>ldconfig -p<\/code><\/td>\n<td>Mostra il contenuto della cache delle librerie condivise.<\/td>\n<\/tr>\n<tr>\n<td><code>LD_LIBRARY_PATH<\/code><\/td>\n<td>Variabile d&#8217;ambiente utilizzata per aggiungere temporaneamente percorsi di ricerca delle librerie.<\/td>\n<\/tr>\n<tr>\n<td><code>\/etc\/ld.so.conf<\/code><\/td>\n<td>File di configurazione contenente le directory utilizzate dal linker dinamico.<\/td>\n<\/tr>\n<tr>\n<td><code>\/etc\/ld.so.conf.d\/<\/code><\/td>\n<td>Directory contenente file di configurazione aggiuntivi del linker dinamico.<\/td>\n<\/tr>\n<tr>\n<td><code>\/etc\/ld.so.cache<\/code><\/td>\n<td>Cache utilizzata dal linker dinamico per velocizzare la ricerca delle librerie.<\/td>\n<\/tr>\n<tr>\n<td><code>.so<\/code><\/td>\n<td>Estensione tipica delle librerie condivise (Shared Object).<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>\ud83d\udca1 Preparazione all&#8217;esame LPIC-1<\/strong> Prima di proseguire assicurati di conoscere il ruolo del linker dinamico, il funzionamento delle librerie condivise, le directory standard che le ospitano, i file <code>\/etc\/ld.so.conf<\/code> e <code>\/etc\/ld.so.cache<\/code>, oltre ai comandi <code>ldd<\/code> e <code>ldconfig<\/code>. Questi argomenti compaiono frequentemente nelle domande della certificazione LPIC-1 Exam 101.<\/p><\/blockquote>\n<hr \/>\n<h2>\u27a1\ufe0f Prossima lezione<\/h2>\n<p>Nella prossima lezione (<strong>102.4 Gestione dei pacchetti Debian<\/strong>) imparerai a utilizzare gli strumenti <strong>dpkg<\/strong> e <strong>APT<\/strong> per installare, aggiornare, rimuovere e verificare i pacchetti software nelle distribuzioni basate su Debian. Approfondirai inoltre la gestione dei repository e delle dipendenze, competenze fondamentali per l&#8217;amministrazione quotidiana di un sistema Linux.<\/p>\n","protected":false},"comment_status":"open","ping_status":"closed","template":"","class_list":["post-3630","lesson","type-lesson","status-publish","has-post-thumbnail","hentry"],"uagb_featured_image_src":[],"uagb_author_info":{"display_name":"Rootmail Academy","author_link":"https:\/\/rootmail.it\/en\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"102.3 Gestire le librerie condivise Le librerie condivise rappresentano uno dei pilastri del funzionamento dei moderni sistemi Linux. Consentono a pi\u00f9 programmi di utilizzare lo stesso codice, riducendo lo spazio occupato su disco, ottimizzando l&#8217;utilizzo della memoria e semplificando gli aggiornamenti del software. Grazie a questo meccanismo, le applicazioni possono condividere funzionalit\u00e0 comuni senza dover&hellip;","_links":{"self":[{"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/lesson\/3630","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/lesson"}],"about":[{"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/types\/lesson"}],"replies":[{"embeddable":true,"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/comments?post=3630"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/media\/3669"}],"wp:attachment":[{"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/media?parent=3630"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}