Librerie statiche e condivise
Creare e collegare librerie
Librerie statiche e condivise è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.
Che cos'è una libreria
Una libreria è un insieme di file oggetto compilati che è possibile riutilizzare in più programmi senza ricompilare ogni volta il codice sorgente.
In C ne esistono due tipi:
- Librerie statiche (
.a), copiate nell'eseguibile al momento del collegamento - Librerie condivise (
.so), caricate durante l'esecuzione
Compilare i file oggetto
Entrambi i tipi partono dai file oggetto. Si compilino i sorgenti con -c come di consueto.
Questi file .o sono il materiale di base che l'archiver o il linker impacchetterà.
gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.oCreare una libreria statica
L'archiver ar raggruppa i file oggetto in un archivio .a. Il nome convenzionale è lib<name>.a.
I flag significano: r inserisce, c crea se necessario, s scrive un indice.
ar rcs libmymath.a mathlib.o strlib.oCollegare una libreria statica
Si esegua il collegamento con -L per la directory di ricerca e -l per il nome della libreria (si omettano il prefisso lib e il suffisso .a).
Il codice necessario viene copiato nell'eseguibile, che può quindi funzionare autonomamente.
gcc main.c -L. -lmymath -o appVantaggi e svantaggi del collegamento statico
Il collegamento statico è semplice e autonomo:
- L'eseguibile contiene tutto e non ha dipendenze durante l'esecuzione
- Tuttavia, ogni programma che ne contiene una copia produce binari più grandi
- Per correggere un bug della libreria è necessario ricollegare ogni programma che la utilizza
Codice indipendente dalla posizione
Le librerie condivise possono essere caricate a qualsiasi indirizzo di memoria, quindi il loro codice deve essere indipendente dalla posizione. Si compili con -fPIC.
In questo modo viene generato codice che usa indirizzi relativi invece di indirizzi fissi.
gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.oCreare una libreria condivisa
Si crei il file .so con -shared. La convenzione prevede il nome lib<name>.so.
A differenza di un archivio statico, questo è un oggetto realmente collegato che il loader può mappare durante l'esecuzione.
gcc -shared mathlib.o strlib.o -o libmymath.soCollegare una libreria condivisa
Il collegamento è identico al caso statico. La differenza è che il codice non viene copiato: viene registrato solo un riferimento.
L'eseguibile rimane piccolo, ma ora dipende dalla possibilità di trovare libmymath.so durante l'esecuzione.
gcc main.c -L. -lmymath -o appTrovare la libreria durante l'esecuzione
All'avvio, il loader dinamico cerca il file .so nei percorsi standard. Una libreria nella directory corrente non si trova in quell'elenco.
Per i test, si indichi al loader dove cercarla con LD_LIBRARY_PATH (Linux).
LD_LIBRARY_PATH=. ./appVantaggi e svantaggi delle librerie condivise
Le librerie condivise sacrificano la semplicità a favore della flessibilità:
- Una sola copia in memoria viene condivisa da molti programmi, risparmiando RAM e spazio su disco
- Una correzione di bug nel file
.soè disponibile per ogni programma senza ricollegarlo - Tuttavia, il programma non si avvia se il file
.somanca o è incompatibile
Quest'ultimo rischio è il classico problema delle 'dipendenze infernali'.
Esaminare le dipendenze
Due strumenti aiutano a vedere da quali librerie dipende un binario:
ldd appelenca le librerie condivise necessarie al loader durante l'esecuzionenm libmymath.aelenca i simboli (funzioni) contenuti in una libreria
Se ldd mostra 'not found', il loader non riesce a trovare il file .so nei propri percorsi di ricerca.
ldd app
nm libmymath.aVerifica rapida
Abbini il flag all'obiettivo.
Riepilogo
Ora è possibile compilare e collegare entrambi i tipi di libreria:
- Statica:
ar rcs libX.a *.o; il codice viene copiato nel binario, che è autonomo ma più grande - Condivisa: si compila con
-fPIC, si crea con-sharede il codice viene caricato durante l'esecuzione - Entrambe si collegano con
-Le-l; le librerie condivise richiedono un percorso di ricerca durante l'esecuzione, comeLD_LIBRARY_PATH
Ora dispone dell'intera toolchain, dal preprocessore alla compilazione.
Domande Frequenti
La lezione «Librerie statiche e condivise» è gratuita?
Sì — il testo completo di «Librerie statiche e condivise» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.
Cosa imparerò in «Librerie statiche e condivise»?
Creare e collegare librerie Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C Academy?
Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Librerie statiche e condivise»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C Academy?
Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Compilazione condizionale
- Progetti su più file
- Makefile
- Librerie statiche e condivise