[C++] Confusione Loader e Linker

pepp1995
Dal libro mi si definisce:
(linker)= programma che è in grado di collegare fra loro i diversi File oggetto e con il supporto al tempo di esecuzione

Tuttavia , quel che so è che è il Loader ad indicare al compilatore dove verrà collacato l'eseguibile nella RAM. Cosa intende con "il supporto al tempo di esecuzione" ?

Risposte
apatriarca
Il loader non ha nulla a che fare con la compilazione. Interviene infatti durante l'esecuzione del programma. Il linker e il loader eseguono comunque operazioni molto diverse tra di loro:
- Il loader carica il codice del programma in RAM in modo da poterlo eseguire (il programma sarà contenuto in un qualche file eseguibile in un formato particolare).
- Il linker prende un insieme di file oggetto (il codice di determinate parti indipendenti del programma - ognuno in un file diverso) e le mette insieme in un singolo file (lo stesso che poi il loader caricherà in memoria).

pepp1995
Grazie per la risposta,
quindi:
Linking: e’ la fase successiva alla compilazione che consiste nell’utilizzare un programma (Linker) per
– collegare tra loro più file oggetto (es. il codice di una funzione scritta da noi e il codice oggetto della stessa funzione che si trova nella S.T.L.)
– memorizzare il tutto nel File.exe

Loading: è la fase in cui un programma (Loader) “ colloca il File.exe nella RAM del sistema”

Dubbi:
1)<< linking : i diversi moduli oggetto costituenti il programma eseguibile vengono collezionati fra loro e con il supporto al tempo di esecuzione (rt1,…,rtm) >> cit. libro

Con “con il supporto al tempo di esecuzione” intende dire che è possibile fare una sorta di collegamento dinamico? Nel senso che il collegamento lo possiamo fare sia PRIMA che DOPO la creazione del .exe?

2)Linkage: è il modo con cui sono collegate le varie unità di traduzione (?)

apatriarca
Possiamo pensare di associare ad ogni funzione un indirizzo in memoria (quello di inizio delle sue istruzioni). Questo indirizzo può essere calcolato in modi diversi. Quando la funzione è inclusa in uno dei file oggetto usati per creare il file eseguibile, questo indirizzo è fissato in tempo di compilazione in quanto corrisponderà ad una "posizione" nel file eseguibile. Una funzione può anche non essere inclusa nel file eseguibile. In questo caso il sistema operativo dovrà caricare la libreria dinamica (.dll su Windows e .so in linux/unix) corrispondente e aggiornare l'indirizzo della funzione in modo che punti alla posizione corretta nella libreria. In realtà può essere tutto molto più complicato di così, ma direi che come idea generale/iniziale possa andare.

pepp1995
E per quanto riguarda la differenza tra Linkage e Linking?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.