0Pricing
C Academy · Lezione

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.o

Creare 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.o

Collegare 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 app

Vantaggi 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.o

Creare 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.so

Collegare 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 app

Trovare 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=. ./app

Vantaggi 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 .so manca 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 app elenca le librerie condivise necessarie al loader durante l'esecuzione
  • nm libmymath.a elenca 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.a

Verifica 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 -shared e il codice viene caricato durante l'esecuzione
  • Entrambe si collegano con -L e -l; le librerie condivise richiedono un percorso di ricerca durante l'esecuzione, come LD_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

  1. Compilazione condizionale
  2. Progetti su più file
  3. Makefile
  4. Librerie statiche e condivise
← Torna a C Academy