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.
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:
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.
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.
unire segmenti: unisce segmenti dello stesso tipo (come segmenti di codice, segmenti di dati, ecc.) da diversi file di destinazione in un segmento continuo.
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.
Genera file eseguibile: L'output finale è un file eseguibile che può essere eseguito sul sistema operativo.
Collegamento statico ECollegamento dinamico Sono due modalità di funzionamento del linker, ciascuna con caratteristiche e scenari di utilizzo diversi.
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:
discordanza:
Estensione della libreria statica:
.lib
.a
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:
discordanza:
Estensione della libreria dinamica:
.dll
(Libreria a collegamento dinamico).so
(Oggetto condiviso)Su diversi sistemi operativi, i metodi per creare librerie a collegamento dinamico sono leggermente diversi. Ecco alcuni passaggi e comandi comuni:
Scrivi il codice della libreria:
Crea un file sorgente C contenente le funzioni che vogliamo inserire nella libreria dinamica.
// example.cpp
#include