Quando viene compilato un programma C, il compilatore genera codice oggetto. Dopo aver generato il codice oggetto, il compilatore richiama anche linker. Uno dei compiti principali per linker è quello di fare il codice di funzioni di libreria (ad esempio printf (), scanf (), sqrt (),..ecc) disponibile per il vostro programma. Un linker può eseguire questa operazione in due modi, copiando il codice della funzione di libreria nel codice oggetto o facendo alcune disposizioni in modo che il codice completo delle funzioni di libreria non venga copiato, ma reso disponibile in fase di esecuzione.,

Il collegamento statico e le librerie statiche sono il risultato del linker che copia tutte le funzioni di libreria utilizzate nel file eseguibile. Il collegamento statico crea file binari più grandi e richiede più spazio su disco e memoria principale. Esempi di librerie statiche (librerie che sono collegate staticamente) sono, .un file in Linux e .file lib in Windows.

Passi per creare una libreria statica Creiamo e usiamo una libreria statica in UNIX o UNIX like OS.
1. Creare un file C che contiene funzioni nella libreria.,div>

#include <stdio.h>
void fun(void)
{
printf("fun() called from a static library");
}



We have created only one file for simplicity., Possiamo anche creare più file nella libreria.

2. Creare un file di intestazione della libreria

void fun(void);



3. Compilare i file di libreria.

 gcc -c lib_mylib.c -o lib_mylib.o 

4. Crea libreria statica., Questo passaggio consiste nel raggruppare più file oggetto in una libreria statica (vedere ar per i dettagli). L’output di questo passaggio è la libreria statica.

 ar rcs lib_mylib.a lib_mylib.o 

5. Ora la nostra libreria statica è pronta per l’uso. A questo punto potremmo semplicemente copiare lib_mylib.un altro posto per usarlo. Per scopi dimostrativi, manteniamo la libreria nella directory corrente.

Creiamo un programma di driver che utilizza sopra libreria statica creata.
1., Creare un file C con la funzione principale

#include "lib_mylib.h"
void main()
{
fun();
}



2., Compilare il programma del driver.

gcc -c driver.c -o driver.o

3. Collegare il programma driver compilato alla libreria statica. Si noti che-L. è usato per dire che la libreria statica è nella cartella corrente (vedere questo per i dettagli delle opzioni-L e-l).

gcc -o driver driver.o -L. -l_mylib

4. Eseguire il programma del driver

./driver fun() called from a static library

Di seguito sono riportati alcuni punti importanti sulle librerie statiche.
1. Per una libreria statica, il codice effettivo viene estratto dalla libreria dal linker e utilizzato per creare l’eseguibile finale nel punto in cui si compila/si compila l’applicazione.,

2. Ogni processo ottiene la propria copia del codice e dei dati. Dove, come nel caso delle librerie dinamiche, è solo il codice condiviso, i dati sono specifici per ciascun processo. Per le librerie statiche le impronte di memoria sono più grandi. Ad esempio, se tutti gli strumenti di sistema della finestra fossero collegati staticamente, diverse decine di megabyte di RAM sarebbero sprecati per un utente tipico e l’utente sarebbe rallentato da un sacco di paging.

3. Poiché il codice della libreria è connesso in fase di compilazione, l’eseguibile finale non ha dipendenze dalla libreria in fase di esecuzione, ad es., nessun costo aggiuntivo di caricamento in fase di esecuzione, significa che non è necessario portare con sé una copia della libreria che viene utilizzata e hai tutto sotto il tuo controllo e non c’è dipendenza.

4. Nelle librerie statiche, una volta che tutto è incluso nella tua applicazione, non devi preoccuparti che il client abbia la libreria (e la versione) giuste disponibili sul loro sistema.

5. Uno svantaggio delle librerie statiche è che, per qualsiasi modifica (up-gradation) nelle librerie statiche, è necessario ricompilare il programma principale ogni volta.

6., Uno dei principali vantaggi delle librerie statiche preferite anche ora “è la velocità”. Non ci saranno interrogazioni dinamiche di simboli nelle librerie statiche. Molti software di linea di produzione utilizzano librerie statiche ancora oggi.

Dynamic linking e Dynamic Libraries Dynamic Linking non richiede la copia del codice, è fatto semplicemente inserendo il nome della libreria nel file binario. Il collegamento effettivo avviene quando il programma viene eseguito, quando sia il file binario che la libreria sono in memoria. Esempi di librerie dinamiche (librerie che sono collegate in fase di esecuzione) sono,. so in Linux e.dll in Windows.,

Presto copriremo più punti sulle librerie dinamiche e sui passaggi per crearle.

Questo articolo è compilato da Abhijit Saha e recensito da GeeksforGeeks squadra. Si prega di scrivere commenti se trovate qualcosa di sbagliato, o se si desidera condividere ulteriori informazioni sull’argomento discusso sopra.

Lettore di attenzione! Non smettere di imparare ora. Entrare in possesso di tutti gli importanti concetti di Teoria CS per le interviste SDE con il corso di Teoria CS ad un prezzo studente-friendly e diventare industria pronta.

Articolo Tag:
Pratica Tag:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *