Collegamento

In un progetto C++ il passaggio di collegamento viene eseguito dopo che il compilatore compila il codice sorgente in file oggetto (*.obj). Il linker (link.exe) combina i file oggetto in un singolo file eseguibile.

Le opzioni del linker possono essere impostate all'interno o all'esterno di Visual Studio. In Visual Studio è possibile accedere alle opzioni del linker facendo clic con il pulsante destro del mouse su un nodo del progetto in Esplora soluzioni e scegliendo Proprietà per visualizzare le pagine delle proprietà. Scegliere Linker nel riquadro sinistro per espandere il nodo e visualizzare tutte le opzioni.

Sintassi della riga di comando del linker

Quando si esegue il linker all'esterno di Visual Studio, è possibile specificare l'input in uno o più modi:

  • Sulla riga di comando
  • Uso dei file di comando
  • Nelle variabili di ambiente

Il linker elabora innanzitutto le opzioni specificate nella LINK variabile di ambiente, seguite dalle opzioni nell'ordine in cui sono specificate nella riga di comando e nei file di comando. Se un'opzione viene ripetuta con argomenti diversi, l'ultima elaborata ha la precedenza.

Le opzioni si applicano all'intera compilazione; nessuna opzione può essere applicata a file di input specifici.

Per eseguire link.exe, usare la sintassi di comando seguente:

link arguments

Le arguments opzioni di inclusione e i nomi file e possono essere specificati in qualsiasi ordine. Le opzioni vengono elaborate per prime, quindi i file. Usare uno o più spazi o schede per separare gli argomenti.

Nota

È possibile avviare questo strumento solo dal prompt dei comandi di Visual Studio. Non è possibile avviarlo da un prompt dei comandi di sistema o da Esplora file.

Riga di comando

Nella riga di comando un'opzione è costituita da un identificatore di opzione, un trattino (-) o una barra (/), seguito dal nome dell'opzione. I nomi delle opzioni non possono essere abbreviati. Alcune opzioni accettano un argomento, specificato dopo i due punti (:). Non sono consentiti spazi o tabulazioni all'interno di una specifica di opzione, ad eccezione di una stringa tra virgolette nell'opzione /COMMENT . Specificare argomenti numerici nella notazione decimale o in linguaggio C. I nomi delle opzioni e le relative parole chiave o argomenti nomefile non fanno distinzione tra maiuscole e minuscole, ma gli identificatori come argomenti fanno distinzione tra maiuscole e minuscole.

Per passare un file al linker, specificare il nome file nella riga di comando dopo il link.exe comando. È possibile specificare un percorso assoluto o relativo con il nome file ed è possibile usare caratteri jolly nel nome file. Se si omette il punto (.) e l'estensione del nome file, il linker presuppone un'estensione di .obj per trovare il file. Il linker non usa le estensioni del nome file o la mancanza di tali estensioni per fare ipotesi sul contenuto dei file. Determina il tipo di file esaminandolo ed elaborandolo di conseguenza.

Il linker restituisce zero per l'esito positivo (nessun errore). In caso contrario, restituisce il numero di errore che ha arrestato il collegamento. Ad esempio, se il linker genera LNK1104, il linker restituisce 1104. Di conseguenza, il numero di errore più basso restituito in un errore dal linker è 1000. Un valore restituito 128 rappresenta un problema di configurazione con il sistema operativo o un file con estensione config; il caricatore non è stato link.exe caricato o c2.dll.

File di comando del linker

È possibile passare argomenti della riga di comando a link.exe sotto forma di file di comando. Per specificare un file di comando per il linker, usare la sintassi seguente:

link @commandfile

commandfile è il nome di un file di testo. Non è consentito spazio o tabulazioni tra il segno di chiome (@) e il nome file. Non esiste un'estensione predefinita; è necessario specificare il nome file completo, inclusa qualsiasi estensione. Non è possibile usare caratteri jolly. È possibile specificare un percorso assoluto o relativo con il nome file. Il linker non usa una variabile di ambiente per cercare il file.

Nel file di comando gli argomenti sono separati da spazi o tabulazioni (come nella riga di comando) e da caratteri di nuova riga.

È possibile specificare tutto o parte della riga di comando in un file di comando. È possibile usare più file di comando in un link.exe comando. Il linker accetta l'input del file di comando come se fosse stato specificato in tale posizione nella riga di comando. I file di comando non possono essere annidati. Il linker restituisce il contenuto dei file di comando, a meno che non /NOLOGO venga specificato.

Esempio

Il comando seguente compila una DLL. Passa i nomi dei file oggetto e delle librerie in file di comando separati e usa un terzo file di comando per specificare l'opzione /EXPORTS :

link /dll @objlist.txt @liblist.txt @exports.txt

Il linker riconosce le variabili di ambiente seguenti:

  • LINK e _LINK_, se definito. Il linker antepone le opzioni e gli argomenti definiti nella LINK variabile di ambiente e aggiunge le opzioni e gli argomenti definiti nella variabile di ambiente agli argomenti della _LINK_ riga di comando prima dell'elaborazione.
  • LIB, se definito. Il linker usa il LIB percorso quando cerca un oggetto, una libreria o un altro file specificato nella riga di comando o dall'opzione /BASE . Usa anche il LIB percorso per trovare un .pdb file denominato in un oggetto . La LIB variabile può contenere una o più specifiche di percorso, separate da punti e virgola. Un percorso deve puntare alla \lib sottodirectory dell'installazione di Visual C++.
  • PATH, se lo strumento deve essere eseguito CVTRES e non riesce a trovare il file nella stessa directory di link.exe se stessa. (link.exe richiede CVTRES di collegare un .res file. PATH ) deve puntare alla \bin sottodirectory dell'installazione di Visual C++.
  • TMP, per specificare una directory durante il collegamento di file o .res OMF.

Vedi anche

C/C++ Building Reference (Informazioni di riferimento per la compilazione in C/C++)
Opzioni del linker MSVC
File module-definition (con estensione def)
Supporto per le DLL a caricamento ritardato nel linker