Dela via


Linking

I ett C++-projekt utförs länkningssteget när kompilatorn kompilerar källkoden till objektfiler (*.obj). Länkaren (link.exe) kombinerar objektfilerna till en enda körbar fil.

Länkalternativ kan anges i eller utanför Visual Studio. I Visual Studio får du åtkomst till länkalternativ genom att högerklicka på en projektnod i Solution Explorer och välja Egenskaper för att visa egenskapssidorna. Välj Linker i det vänstra fönstret för att expandera noden och se alla alternativ.

Kommandoradssyntax för Linker

När du kör länkaren utanför Visual Studio kan du ange indata på ett eller flera sätt:

  • På kommandoraden
  • Använda kommandofiler
  • I miljövariabler

Länkaren bearbetar de första processalternativen LINK som anges i miljövariabeln, följt av alternativ i den ordning de anges på kommandoraden och i kommandofilerna. Om ett alternativ upprepas med olika argument prioriteras det sista som bearbetas.

Alternativen gäller för hela bygget. inga alternativ kan tillämpas på specifika indatafiler.

Om du vill köra link.exeanvänder du följande kommandosyntax:

link arguments

Inkludera arguments alternativ och filnamn och kan anges i valfri ordning. Alternativen bearbetas först och sedan filer. Använd ett eller flera blanksteg eller flikar för att separera argument.

Anmärkning

Du kan bara starta det här verktyget från Visual Studio-kommandotolken. Du kan inte starta den från en systemkommandofråga eller från Utforskaren.

kommandorad

På kommandoraden består ett alternativ av en alternativspecificerare, antingen ett streck (-) eller ett snedstreck (/), följt av namnet på alternativet. Alternativnamn kan inte förkortas. Vissa alternativ tar ett argument som anges efter ett kolon (:). Inga blanksteg eller flikar tillåts i en alternativspecifikation, förutom i en citerad sträng i /COMMENT alternativet. Ange numeriska argument i decimal- eller C-språk notation. Alternativnamn och deras nyckelords- eller filnamnsargument är inte skiftlägeskänsliga, men identifierare som argument är skiftlägeskänsliga.

Om du vill skicka en fil till länkaren anger du filnamnet på kommandoraden link.exe efter kommandot. Du kan ange en absolut eller relativ sökväg med filnamnet och du kan använda jokertecken i filnamnet. Om du utelämnar filnamnstillägget punkt (.) och filnamn förutsätter länkaren ett tillägg .obj för att hitta filen. Länkaren använder inte filnamnstillägg eller bristen på dem för att göra antaganden om innehållet i filer. Den avgör vilken typ av fil som ska undersökas och bearbetas därefter.

Anmärkning

Olika länkflaggor tar ett filnamn. Oavsett om du anger en relativ sökväg eller en absolut sökväg, om det fullständigt kvalificerade filnamnet överskrider MAX_PATH (260 tecken), kan länkaren misslyckas – särskilt när du söker efter bibliotek. Om det här problemet uppstår kan du prova att använda en kortare sökväg.

Länkaren returnerar noll för lyckat resultat (inga fel). Annars returneras felnumret som stoppade länken. Om till exempel länkaren genererar returnerar LNK1104länkaren 1104. Därför är det lägsta felnumret som returneras på ett fel av länkaren 1000. Ett returvärde på 128 representerar ett konfigurationsproblem med antingen operativsystemet eller en .config fil. inläsaren läste inte in någon av link.exe dem eller c2.dll.

Linker-kommandofiler

Du kan skicka kommandoradsargument till link.exe i form av en kommandofil. Om du vill ange en kommandofil till länkaren använder du följande syntax:

link @commandfile

commandfile är namnet på en textfil. Inget utrymme eller flik tillåts mellan vid-tecknet (@) och filnamnet. Det finns inget standardtillägg. du måste ange det fullständiga filnamnet, inklusive eventuella tillägg. Jokertecken kan inte användas. Du kan ange en absolut eller relativ sökväg med filnamnet. Får inte överstiga MAX_PATH (260 tecken). Länkaren använder inte en miljövariabel för att söka efter filen.

I kommandofilen avgränsas argumenten med blanksteg eller flikar (som på kommandoraden) och med nya radtecken.

Du kan ange hela eller en del av kommandoraden i en kommandofil. Du kan använda mer än en kommandofil i ett link.exe kommando. Länkaren accepterar kommandofilens indata som om den hade angetts på den platsen på kommandoraden. Det går inte att kapsla kommandofiler. Länkaren ekar innehållet i kommandofilerna, såvida inte /NOLOGO anges.

Example

Följande kommando skapar en DLL. Den skickar namnen på objektfiler och bibliotek i separata kommandofiler och använder en tredje kommandofil för specifikation av /EXPORTS alternativet:

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

Länkaren identifierar följande miljövariabler:

  • LINK och _LINK_, om det definieras. Länkaren förbereder de alternativ och argument som definierats i LINK miljövariabeln och lägger till de alternativ och argument som definierats i _LINK_ miljövariabeln till kommandoradsargumenten innan bearbetningen.
  • LIB, om det definieras. Länkaren använder LIB sökvägen när den söker efter ett objekt, bibliotek eller en annan fil som anges på kommandoraden eller med /BASE alternativet . Den använder LIB också sökvägen för att hitta en .pdb fil med namnet i ett objekt. Variabeln LIB kan innehålla en eller flera sökvägsspecifikationer, avgränsade med semikolon. En sökväg måste peka på underkatalogen \lib för din Microsoft C++-installation.
  • PATH, om verktyget behöver köras CVTRES och inte kan hitta filen i samma katalog som link.exe sig själv. (link.exe kräver CVTRES att en .res fil länkas.) PATH måste peka på underkatalogen \bin för din Microsoft C++-installation.
  • TMP, för att ange en katalog när du länkar OMF eller .res filer.

Se även

C/C++-byggnadsreferens
MSVC Linker-alternativ
Module-Definition (.def) Filer
Linker-stöd för Delay-Loaded DLL:er