Linker è un componente del compilatore utilizzato per combinare diversi file di codice oggetto da varie origini in un unico file eseguibile. Il suo scopo principale è risolvere i riferimenti tra i file (risoluzione dei simboli) ed eseguire la rilocazione dei segmenti di memoria, in modo che tutti i dati nel programma siano collegati correttamente tra loro.
I linker sono utilizzati su molte piattaforme, ma sono particolarmente diffusi nel contesto dei personal computer (PC). Sono spesso utilizzati nel processo di sviluppo delle applicazioni e servono a organizzare una grande quantità di codice in un file più piccolo e compatto.
I linker fanno solitamente parte di un pacchetto del compilatore e possono anche essere utilizzati per collegare insieme librerie, sia dall'ambiente di sviluppo (collegamento statico) che forse da altre librerie (collegamento dinamico).
Le fasi principali della modifica di un link sono:
1. Ricerca biblioteche – Ricerca nell'elenco delle biblioteche per individuare il codice necessario.
2. Risoluzione dei simboli - Risoluzione dei riferimenti tra gli oggetti e la loro implementazione.
3. Unione del codice oggetto - Combinazione dei programmi oggetto in un unico programma eseguibile.
4. Trasferimento degli indirizzi - Adattamento dei riferimenti nel codice, nel caso in cui i segmenti caricati non si trovino negli stessi indirizzi di memoria indicati nel codice.
5. Informazioni di debug: generazione di informazioni di debug per consentire un debug più semplice.
I linker possono anche eseguire attività come l'esecuzione di script aggiuntivi per eseguire configurazioni aggiuntive, aggiungere controlli di sicurezza all'applicazione e garantire la compatibilità con altre piattaforme.
I virus informatici sono stati creati anche per usi dannosi, in particolare per infettare e collegare codice dannoso a programmi esistenti. Pertanto uno dei compiti più importanti per un linker è garantire la sicurezza e la protezione del programma collegato.