Condivisione della tecnologia

Come funziona il linker, la differenza tra collegamento statico e collegamento dinamico, come creare e utilizzare librerie di collegamento dinamico

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Il linker svolge un ruolo fondamentale nello sviluppo del programma È responsabile dell'integrazione di più file oggetto e file di libreria in un file eseguibile. Prima di approfondire il funzionamento del linker, la differenza tra collegamento statico e collegamento dinamico e come creare e utilizzare librerie di collegamento dinamico, delineamo innanzitutto le funzioni di base del linker.

Come funziona il linker

Collegamento È uno strumento responsabile della combinazione di uno o più file oggetto e file di libreria in un file eseguibile. Le sue funzioni principali includono:

  1. Analisi dei simboli : Identificare ed elaborare tutti i simboli (nomi di funzioni e variabili) nel programma, assicurandosi che ogni simbolo abbia una definizione univoca. Per i simboli a cui si fa riferimento ma non definiti (simboli esterni), il linker cerca una definizione in una libreria fornita o in un altro file oggetto.

  2. Ripristina : adattare il codice e gli indirizzi dati in ciascun modulo all'indirizzo di memoria finale. La rilocazione include la correzione dell'indirizzo nel codice e la regolazione della posizione del segmento dati per garantire che tutti i riferimenti puntino alla posizione di memoria corretta.

  3. unire segmenti: unisce segmenti dello stesso tipo (come segmenti di codice, segmenti di dati, ecc.) da diversi file di destinazione in un segmento continuo.

  4. libreria di elaborazione : Collega il codice della libreria richiesta dal programma con il file oggetto. Il linker può gestire due tipi di librerie: librerie statiche e librerie dinamiche.

  5. Genera file eseguibile: L'output finale è un file eseguibile che può essere eseguito sul sistema operativo.

La differenza tra collegamento statico e collegamento dinamico

Collegamento statico ECollegamento dinamico Sono due modalità di funzionamento del linker, ciascuna con caratteristiche e scenari di utilizzo diversi.

collegamento statico
  • concetto : Nel collegamento statico, il codice della libreria viene copiato in fase di compilazione e incorporato in ogni eseguibile che lo utilizza. In questo modo, il file eseguibile generato contiene tutto il codice richiesto e non si basa su file di libreria esterni.

  • vantaggio

    • Forte indipendenza: il file eseguibile generato contiene tutte le dipendenze e non richiede file di libreria aggiuntivi in ​​fase di runtime.
    • Buona compatibilità: il runtime non dipende dalla versione della libreria installata nel sistema e non incontrerà il problema del "conflitto di versione della libreria".
  • discordanza

    • File di grandi dimensioni: ogni file eseguibile contiene il codice completo della libreria, con conseguente aumento delle dimensioni del file.
    • Problemi di aggiornamento: se la libreria viene aggiornata, tutti i programmi che utilizzano la libreria devono essere ricompilati.
  • Estensione della libreria statica

    • Finestre: .lib
    • Unix/Linux: .a
collegamento dinamico
  • concetto : Nel collegamento dinamico, il codice della libreria viene caricato in fase di esecuzione e non è incorporato nel file eseguibile. L'eseguibile contiene solo riferimenti alle librerie e il codice della libreria viene caricato dal sistema operativo in fase di runtime.

  • vantaggio

    • File di piccole dimensioni: il file eseguibile non contiene codice di libreria, solo riferimenti alla libreria.
    • Facile da aggiornare: l'aggiornamento delle librerie non richiede la ricompilazione del programma, ma solo la sostituzione dei file della libreria.
    • Elevata efficienza della memoria: più programmi possono condividere istanze di memoria dello stesso file di libreria, riducendo l'utilizzo della memoria.
  • discordanza

    • Dipendenze forti: il file eseguibile deve essere in grado di trovare e caricare la versione corretta del file di libreria quando viene eseguito.
    • Problemi di compatibilità: la mancata corrispondenza della versione del file della libreria può causare il fallimento del programma.
  • Estensione della libreria dinamica

    • Finestre: .dll(Libreria a collegamento dinamico)
    • Unix/Linux: .so(Oggetto condiviso)

Creare e utilizzare librerie di collegamento dinamico

Creare una libreria di collegamento dinamico

Su diversi sistemi operativi, i metodi per creare librerie a collegamento dinamico sono leggermente diversi. Ecco alcuni passaggi e comandi comuni:

Creare una libreria a collegamento dinamico su Linux
  1. Scrivi il codice della libreria

    Crea un file sorgente C contenente le funzioni che vogliamo inserire nella libreria dinamica.

    // example.cpp
    #include