Propojení
V projektu C++ se krok propojování provádí po kompilaci zdrojového kódu do objektů souborů (*.obj). Linker (link.exe
) kombinuje soubory objektů do jednoho spustitelného souboru.
Možnosti linkeru je možné nastavit uvnitř nebo mimo sadu Visual Studio. V sadě Visual Studio získáte přístup k možnostem linkeru tak, že kliknete pravým tlačítkem na uzel projektu v Průzkumník řešení a zvolíte Vlastnosti, aby se zobrazily stránky vlastností. V levém podokně zvolte Linker a rozbalte uzel a zobrazte všechny možnosti.
Syntaxe příkazového řádku linkeru
Při spuštění linkeru mimo Visual Studio můžete zadat vstup jedním nebo několika způsoby:
- Na příkazovém řádku
- Použití souborů příkazů
- V proměnných prostředí
Linker nejprve zpracuje možnosti zadané v LINK
proměnné prostředí a potom možnosti v pořadí, v jakém jsou zadané na příkazovém řádku a v souborech příkazů. Pokud se možnost opakuje s různými argumenty, má přednost poslední zpracovaná možnost.
Možnosti platí pro celé sestavení; u konkrétních vstupních souborů nelze použít žádné možnosti.
Ke spuštění link.exe
použijte následující syntaxi příkazu:
link arguments
Zahrnout arguments
možnosti a názvy souborů a lze je zadat v libovolném pořadí. Nejprve se zpracovávají možnosti a pak soubory. K oddělení argumentů použijte jednu nebo více mezer nebo tabulátoru.
Poznámka:
Tento nástroj můžete spustit pouze z příkazového řádku sady Visual Studio. Nemůžete ho spustit z příkazového řádku systému ani z Průzkumník souborů.
Příkazový řádek
Na příkazovém řádku se možnost skládá ze specifikátoru možnosti, pomlčky (-
) nebo lomítka (/
) následovaného názvem možnosti. Názvy možností nelze zkrátit. Některé možnosti přebírají argument zadaný za dvojtečku (:
). Ve specifikaci možnosti nejsou povoleny žádné mezery ani tabulátory, s výjimkou řetězce v uvozvozování v této /COMMENT
možnosti. Zadejte číselné argumenty v desítkovém zápisu nebo zápisu jazyka C. Názvy možností a jejich argumenty klíčového slova nebo názvu souboru nerozlišují velká a malá písmena, ale identifikátory jako argumenty rozlišují malá a velká písmena.
Pokud chcete předat soubor do linkeru, zadejte název souboru na příkazovém řádku za příkazem link.exe
. Můžete zadat absolutní nebo relativní cestu s názvem souboru a v názvu souboru můžete použít zástupné cardy. Pokud vynecháte tečku (.
) a příponu souboru, linker předpokládá příponu .obj
k nalezení souboru. Linker nepoužívá přípony souborů ani jejich nedostatek k předpokladům o obsahu souborů. Určuje typ souboru tím, že ho prozkoumá a odpovídajícím způsobem zpracuje.
Linker vrátí nulu pro úspěch (žádné chyby). V opačném případě vrátí číslo chyby, která propojení zastavila. Pokud například linker vygeneruje LNK1104
, vrátí linker hodnotu 1104. Proto nejnižší číslo chyby vrácené linkerem je 1 000. Návratová hodnota 128 představuje problém s konfigurací operačního systému nebo souboru .config; zavaděč nenačetl ani link.exe
c2.dll
.
Soubory příkazů linkeru
Argumenty link.exe
příkazového řádku můžete předat ve formě souboru příkazu. Pokud chcete zadat soubor příkazu do linkeru, použijte následující syntaxi:
link @commandfile
Jedná se commandfile
o název textového souboru. Mezi znakem at (@) a názvem souboru není povoleno žádné mezery ani tabulátor. Neexistuje žádné výchozí rozšíření; musíte zadat úplný název souboru včetně libovolné přípony. Zástupné cardy nelze použít. Pomocí názvu souboru můžete zadat absolutní nebo relativní cestu. Linker k vyhledání souboru nepoužívá proměnnou prostředí.
V souboru příkazu jsou argumenty oddělené mezerami nebo tabulátory (jako na příkazovém řádku) a znaky nového řádku.
V příkazovém řádku můžete zadat celý příkazový řádek nebo jeho část. V příkazu můžete použít více než jeden soubor link.exe
příkazu. Linker přijímá vstup příkazového souboru, jako by byl zadán v tomto umístění na příkazovém řádku. Soubory příkazů nelze vnořit. Linker vypíše obsah souborů příkazů, pokud /NOLOGO
není zadán.
Příklad
Následující příkaz vytvoří knihovnu DLL. Předává názvy souborů objektů a knihoven v samostatných souborech příkazů a pro specifikaci /EXPORTS
této možnosti používá třetí příkazový soubor:
link /dll @objlist.txt @liblist.txt @exports.txt
Proměnné prostředí LINK
Linker rozpozná následující proměnné prostředí:
LINK
a_LINK_
, pokud jsou definovány. Linker předdefinuje možnosti a argumenty definované vLINK
proměnné prostředí a před zpracováním připojí možnosti a argumenty definované v_LINK_
proměnné prostředí k argumentům příkazového řádku.LIB
, pokud je definováno. Linker používáLIB
cestu při hledání objektu, knihovny nebo jiného souboru zadaného na příkazovém řádku nebo pomocí/BASE
možnosti. Používá takéLIB
cestu k vyhledání.pdb
souboru pojmenovaného v objektu. ProměnnáLIB
může obsahovat jednu nebo více specifikací cesty oddělené středníky. Jedna cesta musí odkazovat na\lib
podadresář instalace Visual C++.PATH
, pokud nástroj potřebuje spustitCVTRES
a nemůže najít soubor ve stejném adresáři jakolink.exe
sám. (link.exe
vyžadujeCVTRES
propojení.res
souboru.)PATH
musí odkazovat na\bin
podadresář instalace Visual C++.TMP
, určit adresář při propojování OMF nebo.res
souborů.
Viz také
Referenční zdroje k sestavení programu v jazyce C/C++
Možnosti linkeru MSVC
Soubory definice modulu (.def)
Podpora linkeru pro knihovny DLL s odloženým načtením