Richiamo di CL da parte del linker
Aggiornamento: novembre 2007
CL richiama automaticamente il linker dopo la compilazione, a meno che non venga utilizzata l'opzione /c. CL passa al linker i nomi dei file obj creati durante la compilazione e i nomi di qualsiasi altro file specificato nella riga di comando. Il linker utilizza le opzioni elencate nella variabile di ambiente LINK. È possibile utilizzare l'opzione /link per specificare le opzioni del linker nella riga di comando CL. Con le opzioni che seguono l'opzione /link viene eseguito l'override delle opzioni presenti nella variabile di ambiente LINK. Le opzioni riportate nella tabella che segue consentono di disattivare il collegamento.
Opzione |
Descrizione |
---|---|
/c |
Compilazione senza collegamento |
/E, /EP, /P |
Pre-elaborazione senza compilazione o collegamento |
/Zg |
Generazione di prototipi di funzione |
/Zs |
Controllo della sintassi |
Per ulteriori informazioni sul collegamento, vedere Opzioni del linker.
Esempio
Si supponga di compilare tre file di origine C: MAIN.c, MOD1.c e MOD2.c. Ogni file include una chiamata a una funzione definita in un file differente:
MAIN.c chiama la funzione func1 in MOD1.c e la funzione func2 in MOD2.c.
MOD1.c chiama le funzioni della libreria standard printf_s e scanf_s.
MOD2.c chiama le funzioni di grafica denominate myline e mycircle, che sono definite in una libreria denominata MYGRAPH.lib.
Per generare questo programma, effettuare la compilazione con la seguente riga di comando:
CL MAIN.c MOD1.C MOD2.C MYGRAPH.lib
CL compila prima i file di origine C e crea i file oggetto MAIN.obj, MOD1.obj e MOD2.obj. Il compilatore inserisce il nome della libreria standard in ogni file obj. Per informazioni più dettagliate, vedere Utilizzo della libreria di runtime.
CL passa i nomi dei file obj, insieme al nome MYGRAPH.lib, al linker. Il linker risolve i riferimenti esterni nel modo seguente:
In MAIN.obj, il riferimento a func1 viene risolto utilizzando la definizione in MOD1.obj. Il riferimento a func2 viene risolto utilizzando la definizione in MOD2.obj.
In MOD1.obj i riferimenti a printf_s e scanf_s vengono risolti utilizzando le definizioni nella libreria che il linker trova specificate all'interno di MOD1.obj.
In MOD2.obj i riferimenti a myline e mycircle vengono risolti utilizzando le definizioni in MYGRAPH.lib.