Chyba linkerů LNK1104
Soubor "název souboru" nelze otevřít.
Tato chyba se zobrazí, když se linkeru nepodaří otevřít soubor, a to buď pro čtení, nebo pro zápis. Mezi nejběžnější příčiny problému patří:
váš program je již spuštěný nebo je načten do ladicího programu a
cesty knihovny jsou nesprávné nebo nejsou zabalené do dvojitých uvozovek.
Existuje mnoho dalších možných příčin této chyby. Pokud je chcete zúžit, nejprve zkontrolujte, jaký je typ souboru souboru. Následující části vám pomůžou identifikovat a opravit konkrétní problém.
Nejde otevřít aplikaci nebo její soubor .pdb
Vaše aplikace je spuštěná nebo je načtena do ladicího programu.
Pokud je název souboru vašeho spustitelného souboru nebo přidružený soubor .pdb, zjistěte, jestli je vaše aplikace již spuštěná. Potom zkontrolujte, jestli je načtený do ladicího programu. Pokud chcete tento problém vyřešit, zastavte program a uvolněte ho z ladicího programu, než ho znovu sestavíte. Pokud je aplikace otevřená v jiném programu, například v editoru prostředků, zavřete ji. Pokud váš program nereaguje, možná budete muset ke konci procesu použít Správce úloh. Možná budete muset také zavřít a restartovat Visual Studio.
Vaše aplikace je uzamčena antivirovou kontrolou
Antivirové programy často dočasně blokují přístup k nově vytvořeným souborům, zejména .exe a .dll spustitelné soubory. Pokud chcete tento problém vyřešit, zkuste vyloučit adresáře sestavení projektu z antivirového skeneru.
Nejde otevřít soubor knihovny Microsoftu
Knihovny Windows, například kernel32.lib
Pokud soubor, který nelze otevřít, je jedním ze standardních souborů knihovny poskytovaných Microsoftem, například kernel32.lib, může se zobrazit chyba konfigurace projektu nebo chyba instalace. Ověřte, že je nainstalovaná sada Windows SDK. Pokud váš projekt vyžaduje další knihovny Microsoftu, například MFC, ujistěte se, že instalační program sady Visual Studio nainstaloval také součásti MFC. Instalační program můžete kdykoli znovu spustit a přidat volitelné komponenty. Další informace naleznete v tématu Úprava sady Visual Studio. Pomocí karty Jednotlivé komponenty v instalačním programu vyberte konkrétní knihovny a sady SDK.
Knihovny vcruntime s verzemi
Pokud chybová zpráva obsahuje verzi knihovny Microsoftu, jako je msvcr120.lib, sada nástrojů platformy pro tuto verzi kompilátoru nemusí být nainstalována. Pokud chcete tento problém vyřešit, máte dvě možnosti: Upgradujte projekt tak, aby používal aktuální sadu nástrojů platformy, nebo nainstalovali starší sadu nástrojů a sestavili projekt beze změny. Další informace najdete v tématu Upgrade projektů ze starších verzí visual C++ a použití nativního cílení na více verzí v sadě Visual Studio k sestavení starých projektů.
Maloobchodní knihovny, ladění nebo knihovny specifické pro platformu
K chybě může dojít při prvním sestavení pro novou cílovou platformu nebo konfiguraci, jako je maloobchod nebo ARM64. V integrovaném vývojovém prostředí ověřte, že jsou nainstalovány sady nástrojů platformy a verze sady Windows SDK zadané na stránce obecné vlastnosti. Ověřte také, že jsou požadované knihovny k dispozici v adresářích knihovny zadaných na stránce vlastností adresářů VC++. Zkontrolujte vlastnosti pro každou konfiguraci, jako je ladění, maloobchod, x86 nebo ARM64. Pokud jeden build funguje, ale druhý ne, porovnejte nastavení obou. Nainstalujte všechny chybějící požadované nástroje a knihovny.
Knihovna vccorlib.lib
Pro aplikace nebo komponenty univerzálních aplikací pro Windows (UPW) nejsou žádné knihovny, které by se zmírňovaly. Pokud chybová zpráva obsahuje vccorlib.lib, je možné, že jste povolili /Qspectre
v projektu UPW. Pokud chcete tento problém vyřešit, zakažte možnost kompilátoru /Qspectre
. V sadě Visual Studio změňte vlastnost Spectre Mitigation . Nachází se na stránce generování kódu C/C++>v dialogovém okně Stránky vlastností projektu.
Knihovny v projektech z online nebo jiných zdrojů
Pokud sestavíte projekt zkopírovaný z jiného počítače, umístění instalace knihovny se můžou lišit. V případě sestavení příkazového řádku ověřte, zda jsou pro sestavení správně nastaveny proměnné prostředí LIB a cesty knihovny. V sadě Visual Studio můžete zobrazit a upravit aktuální cesty knihovny nastavené na stránkách vlastností projektu. Na stránce Adresářů VC++ zvolte ovládací prvek rozevíracího seznamu pro vlastnost Adresáře knihovny a pak zvolte Upravit. Oddíl Vyhodnocená hodnota dialogového okna Adresáře knihoven obsahuje seznam aktuálních cest, které byly prohledána soubory knihovny. Aktualizujte tyto cesty tak, aby odkazy na místní knihovny.
Aktualizace knihoven sady Windows SDK
K této chybě může dojít, když je cesta sady Visual Studio k sadě Windows SDK zaplněná. K tomu může dojít, pokud nainstalujete novější sadu Windows SDK nezávisle na instalačním programu sady Visual Studio. Pokud ho chcete opravit v integrovaném vývojovém prostředí, aktualizujte cesty zadané na stránce vlastností adresářů VC++. Nastavte verzi v cestě tak, aby odpovídala nové sadě SDK. Pokud používáte příkazový řádek pro vývojáře, aktualizujte dávkový soubor, který inicializuje proměnné prostředí pomocí nových cest sady SDK. Tento problém se dá vyhnout pomocí instalačního programu sady Visual Studio k instalaci aktualizovaných sad SDK.
Nejde otevřít soubor knihovny třetí strany
Tento problém má několik běžných příčin:
Cesta k souboru knihovny může být nesprávná nebo není zabalená do dvojitých uvozovek. Nebo jste ho možná nezadáli do linkeru.
Možná jste nainstalovali 32bitovou verzi knihovny, ale vytváříte ji pro 64 bitů nebo naopak.
Knihovna může mít závislosti na jiných knihovnách, které nejsou nainstalované.
Pokud chcete vyřešit problém s cestou pro sestavení příkazového řádku, ověřte, že je nastavená proměnná prostředí LIB. Ujistěte se, že obsahuje cesty pro všechny knihovny, které používáte, a pro každou konfiguraci, kterou sestavíte. V integrovaném vývojovém prostředí se cesty knihovny nastaví pomocí vlastnosti Adresáře> knihovny VC++. Ujistěte se, že jsou tady uvedené všechny adresáře obsahující knihovny, které potřebujete, pro každou konfiguraci, kterou sestavíte.
Možná budete muset zadat adresář knihovny, který přepíše standardní adresář knihovny. Na příkazovém řádku použijte /LIBPATH
možnost. V integrovaném vývojovém prostředí (IDE) použijte vlastnost Additional Library Directories (Další adresáře knihovny) na stránce vlastností Configuration Properties > Linker > General (Obecné ) pro váš projekt.
Ujistěte se, že jste nainstalovali každou verzi knihovny, kterou potřebujete pro konfigurace, které sestavujete. Zvažte použití nástroje pro správu balíčků vcpkg k automatizaci instalace a nastavení pro mnoho běžných knihoven. Pokud je to možné, je nejlepší vytvořit vlastní kopie knihoven třetích stran. Pak budete mít všechny místní závislosti knihoven vytvořené pro stejné konfigurace jako váš projekt.
Nejde otevřít soubor vytvořený projektem
Tato chyba se může zobrazit, pokud název souboru ještě neexistuje, když se k němu linker pokusí získat přístup. Může k tomu dojít, když jeden projekt závisí na jiném projektu v řešení, ale projekty se sestavují v nesprávném pořadí. Pokud chcete tento problém vyřešit, ujistěte se, že jsou odkazy na váš projekt nastavené v projektu, který soubor používá. Chybějící soubor se pak sestaví, než bude potřeba. Další informace naleznete v tématu Přidání odkazů v projektech visual Studio C++ a správa odkazů v projektu.
Nelze otevřít soubor C:\Program.obj
Pokud se v chybové zprávě zobrazí název souboru C:\Program.obj , zabalte cesty knihovny do dvojitých uvozovek. K této chybě dochází v případě, že se do linkeru předá cesta, která začíná na cestě C:\Program Files . Nezapsané cesty můžou také způsobit podobné chyby. Obvykle se v kořenovém adresáři jednotky zobrazí neočekávaný soubor .obj.
Pokud chcete tento problém vyřešit u sestavení příkazového řádku, zkontrolujte parametry možností /LIBPATH . Zkontrolujte také cesty zadané v proměnné prostředí LIB a cesty zadané na příkazovém řádku. U všech cest, které obsahují mezery, nezapomeňte použít dvojité uvozovky.
Pokud chcete tento problém vyřešit v integrovaném vývojovém prostředí, přidejte do následujících vlastností projektu dvojité uvozovky:
Vlastnost Adresáře knihovny na stránce vlastností Vlastnosti konfigurace > VC++ Adresářů,
The Additional Library Directories vlastnost in the Configuration Properties > Linker > General property page,
Vlastnost Additional Dependencies na stránce vlastnosti Vlastnosti konfigurace > Linker > Input .
Další běžné problémy
Problémy s cestou nebo názvem souboru
K této chybě může dojít v případě, že název souboru knihovny nebo cesta zadaná pro linker není správná. Nebo pokud cesta obsahuje neplatnou specifikaci jednotky. Podívejte se na příkazový řádek nebo v libovolné direktivě #pragma comment( lib; "library_name" ) pro problémy. Zkontrolujte pravopis a příponu souboru a ověřte, že soubor existuje v zadaném umístění.
Synchronizace paralelních sestavení
Pokud používáte možnost paralelního sestavení, sada Visual Studio možná soubor zamkla v jiném vlákně. Pokud chcete tento problém vyřešit, ověřte, že ve více projektech není integrovaný stejný objekt kódu nebo knihovna. K vyzvednutí sestavených binárních souborů v projektu použijte závislosti sestavení nebo odkazy na projekt.
Další závislosti zadané v integrovaném vývojovém prostředí
Když v vlastnosti Další závislosti zadáte jednotlivé knihovny přímo, oddělte názvy knihoven mezerami. Nepoužívejte čárky ani středníky. Pokud k otevření dialogového okna Další závislosti použijete položku nabídky Upravit, oddělte názvy pomocí nových řádků, nikoli čárkami, středníky nebo mezerami. Při zadávání cest knihovny v dialogových oknech adresářů knihoven a adresářů dalších knihoven také používejte nové čáry.
Cesty, které jsou příliš dlouhé
Tato chyba se může zobrazit, když se cesta k názvu souboru rozšíří na více než 260 znaků. V případě potřeby změňte uspořádání struktury adresáře nebo zkraťte názvy složek a souborů a zkraťte cesty.
Soubory, které jsou příliš velké
K této chybě může dojít, protože soubor je příliš velký. Knihovny nebo soubory objektů větší než gigabajt můžou způsobit problémy s 32bitovým linkerem. Možná oprava tohoto problému spočívá v použití 64bitové sady nástrojů. Další informace o tom, jak používat 64bitovou sadu nástrojů na příkazovém řádku, najdete v tématu Postupy: Povolení 64bitové sady nástrojů Visual C++ na příkazovém řádku. Informace o použití 64bitové sady nástrojů v integrovaném vývojovém prostředí naleznete v tématu Použití nástroje MSBuild s 64bitovým kompilátorem a nástroji. Podívejte se také na tento příspěvek Stack Overflow: Jak nastavit, aby Sada Visual Studio používala nativní sadu nástrojů amd64.
Nesprávná oprávnění k souborům
K této chybě může dojít v případě, že nemáte dostatečná oprávnění k přístupu k názvu souboru. K tomu může dojít v případě, že pro přístup k souborům knihovny v chráněných systémových adresářích použijete běžný uživatelský účet. Nebo pokud používáte soubory zkopírované od jiných uživatelů, kteří mají stále nastavená původní oprávnění. Pokud chcete tento problém vyřešit, přesuňte soubor do zapisovatelného adresáře projektu. Pokud má přesunutý soubor nepřístupná oprávnění, spusťte příkaz takeown.exe v příkazovém okně správce a převezměte vlastnictví souboru.
Nedostatek místa na disku
K chybě může dojít v případě, že nemáte dostatek místa na disku. Linker používá dočasné soubory v několika případech. I když máte dostatek místa na disku, může velký odkaz zčertět nebo fragmentovat dostupné místo na disku. Zvažte použití možnosti /OPT (Optimalizace) a provádění tranzitivní odstranění COMDAT přečte všechny soubory objektů několikrát.
Problémy s proměnnou prostředí TMP
Pokud má název souboru LNKnnn, jedná se o název souboru vygenerovaný linkerem pro dočasný soubor. Adresář zadaný v proměnné prostředí TMP nemusí existovat. Nebo může být pro proměnnou prostředí TMP zadáno více než jeden adresář. Pro proměnnou prostředí TMP by měla být zadána pouze jedna cesta k adresáři.
Nápověda, můj problém tu není uvedený!
Pokud tady nejsou uvedené žádné problémy, můžete k nápovědě použít nástroje pro zpětnou vazbu v sadě Visual Studio. V integrovaném vývojovém prostředí přejděte na řádek nabídek a zvolte Možnost Odeslat > zpětnou vazbu > o problému. Nebo odešlete návrh pomocí funkce Odeslat návrh pomocí funkce Poslat > názor>. Na dotazy a na webu Visual Studio C++ Developer Community můžete také použít web Q&A pro Microsoft Learn. Na těchto webech můžete hledat odpovědi na otázky a požádat o pomoc. Další informace naleznete v tématu Jak nahlásit problém se sadou nástrojů visual C++ nebo dokumentací.
Pokud jste zjistili nový způsob, jak tento problém vyřešit, který bychom měli přidat do tohoto článku, dejte nám vědět. Svůj názor nám můžete poslat pomocí tlačítka níže pro tuto stránku. Použijte ho k vytvoření nového problému v úložišti GitHub dokumentace jazyka C++. Děkujeme!