linker
Software di sistema che raccoglie le procedure separatamente prodotte nella fase di traduzione di un programma scritto in un certo linguaggio di programmazione e provvede a realizzare un collegamento (to link) tra di loro. La fase in cui interviene il linker si colloca dopo quella di compilazione o assemblaggio delle procedure sorgente e genera come prodotto un programma detto file oggetto (in sistemi MS-DOS e Windows i moduli oggetto hanno l’estensione .obj, mentre in UNIX l’estensione .o). Il programma ottenuto dopo la fase di collegamento è un programma eseguibile completo, che può essere caricato nella memoria del computer ed eseguito (con estensione .exe nei sistemi MS-DOS e Windows, senza estensioni in altri sistemi tra cui UNIX). La necessità di collegare tra loro procedure diverse deriva dal fatto che di solito i programmi vengono scritti suddividendoli in più procedure, le quali sono tipicamente tradotte in modo separato. La scelta di compilare e assemblare separatamente ogni procedura sorgente risponde a criteri di modularità, in quanto in tal modo risulta più semplice la modifica di una delle sue parti, a vantaggio della velocità complessiva del processo di traduzione e collegamento. Ciò risulta tanto più importante al crescere del numero di procedure presenti (che in programmi particolarmente complessi possono raggiungere le migliaia di unità). Inoltre, i programmi fanno spesso appello a funzioni standard il cui codice è già stato scritto, compilato e testato, tanto che il relativo file oggetto viene opportunamente conservato in un’apposita parte del software di sistema, detta libreria di codice, pronto per essere utilizzato da chiunque ne abbia bisogno. Un programma che necessita allora di una funzione presente in tale libreria può limitarsi a prelevarne una copia e richiedere al sistema di includerla nel proprio codice oggetto. Il linker assolve appunto a tali richieste includendo il codice oggetto della libreria nel file oggetto del programma chiamante. A un livello architetturale più basso, il ruolo fondamentale del linker consiste nella risoluzione del problema della rilocazione e del binding dei nomi, operazioni legate alle variazioni di indirizzo dei segmenti di codice in seguito alla compilazione. I sistemi operativi moderni fanno uso di una tecnica detta collegamento dinamico (dynamic linking), secondo la quale alcune procedure non vengono collegate (linkate) finché non vengono effettivamente chiamate, ossia fino a che il programma non è in esecuzione. Tale tecnica è per es. impiegata dalle DLL (Dynamic link library) di Windows o dalle shared library di UNIX. Il linker viene anche chiamato linking loader (nei sistemi UNIX) o linkage editor (nei mainframe IBM).