Dela via


Fel LNK1104 för Länkarverktyg

kan inte öppna filen "filename"

Anmärkningar

Det här felet rapporteras när länkaren inte kan öppna en fil, antingen för läsning eller för skrivning. De två vanligaste orsakerna till problemet är:

  • Ditt program körs redan eller är inläst i felsökningsprogrammet och

  • dina bibliotekssökvägar är felaktiga eller inte omslutna med dubbla citattecken.

Det finns många andra möjliga orsaker till det här felet. Om du vill begränsa dem kontrollerar du först vilken typ av filfilnamn som är. Använd sedan följande avsnitt för att identifiera och åtgärda det specifika problemet.

Det går inte att öppna appen eller dess .pdb-fil

Appen körs, eller är laddad i debuggern

När filnamnet är namnet på den körbara filen eller en associerad .pdb-fil ska du se om programmet redan körs. Kontrollera sedan om den har lästs in i ett felsökningsprogram. Åtgärda problemet genom att stoppa programmet och ta bort det från felsökningsprogrammet innan du skapar det igen. Om appen är öppen i ett annat program, till exempel en resursredigerare, stänger du den. Om programmet inte svarar kan du behöva använda Aktivitetshanteraren för att avsluta processen. Du kan också behöva stänga och starta om Visual Studio.

Appen är låst av en antivirusgenomsökning

Antivirusprogram blockerar ofta tillfälligt åtkomst till nyligen skapade filer, särskilt .exe och .dll körbara filer. Du kan åtgärda det här problemet genom att prova att exkludera dina projektversionskataloger från antivirusskannern.

Det går inte att öppna en Microsoft-biblioteksfil

Windows-bibliotek, till exempel kernel32.lib

Om filen som inte kan öppnas är en av de standardbiblioteksfiler som tillhandahålls av Microsoft, till exempel kernel32.lib, kan du ha ett projektkonfigurationsfel eller ett installationsfel. Kontrollera att Windows SDK är installerat. Om projektet kräver andra Microsoft-bibliotek, till exempel MFC, kontrollerar du att MFC-komponenterna också har installerats av Installationsprogrammet för Visual Studio. Du kan köra installationsprogrammet igen för att lägga till valfria komponenter när som helst. Mer information finns i Ändra Visual Studio. Använd fliken Enskilda komponenter i installationsprogrammet för att välja specifika bibliotek och SDK:er.

Versionshanterade vcruntime-biblioteken

Om felmeddelandet har ett versionshanterat Microsoft-bibliotek, till exempel msvcr120.lib, kanske inte plattformsverktygen för den kompileringsversionen installeras. För att åtgärda det här problemet har du två alternativ: Uppgradera projektet för att använda den aktuella plattformsverktyguppsättningen eller installera den äldre verktygsuppsättningen och skapa projektet oförändrat. Mer information finns i Uppgradera projekt från tidigare versioner av Visual C++ och Använda intern multi-targeting i Visual Studio för att skapa gamla projekt.

Detaljhandels-, felsöknings- eller plattformsspecifika bibliotek

Felet kan inträffa när du först skapar för en ny målplattform eller konfiguration, till exempel Retail eller ARM64. I IDE kontrollerar du att plattformsverktyguppsättningen och Windows SDK-versionen som anges på egenskapssidan Allmänt är installerade. Kontrollera också att de bibliotek som krävs är tillgängliga i bibliotekskatalogerna som anges på egenskapssidan för VC++-kataloger. Kontrollera egenskaperna för varje konfiguration, till exempel Felsökning, Detaljhandel, x86 eller ARM64. Om en version fungerar men en annan inte gör det jämför du inställningarna för båda. Installera nödvändiga verktyg och bibliotek som saknas.

Biblioteket vccorlib.lib

Det finns inga Spectre-minimerade bibliotek för UWP-appar (Universal Windows) eller -komponenter. Om felmeddelandet innehåller vccorlib.lib kan du ha aktiverat /Qspectre i ett UWP-projekt. Inaktivera kompileringsalternativet /Qspectre för att åtgärda problemet. Ändra egenskapen Spectre Mitigation i Visual Studio. Den finns på sidan C/C++>Code Generation i dialogrutan för projektegenskapssidor .

Bibliotek i projekt från nätet eller andra källor

Om du skapar ett projekt som kopierats från en annan dator kan biblioteksinstallationsplatserna vara annorlunda. För kommandoradsversioner kontrollerar du att LIB-miljövariabeln och bibliotekssökvägarna är rätt inställda för bygget. I Visual Studio kan du se och redigera de aktuella bibliotekssökvägarna som angetts på egenskapssidorna för projektet. På sidan VC++ Kataloger väljer du listrutekontrollen för egenskapen Bibliotekskataloger och väljer sedan Redigera. I avsnittet Utvärderat värde i dialogrutan Bibliotekskataloger visas de aktuella sökvägarna som söks efter biblioteksfiler. Uppdatera de här sökvägarna så att de pekar på dina lokala bibliotek.

Windows SDK-bibliotek har uppdaterats

Det här felet kan inträffa när Visual Studio-sökvägen till Windows SDK är inaktuell. Det kan inträffa om du installerar ett nyare Windows SDK oberoende av Installationsprogrammet för Visual Studio. Om du vill åtgärda det i IDE uppdaterar du sökvägarna som anges på egenskapssidan VC++ Kataloger. Ange versionen i sökvägen så att den matchar det nya SDK:n. Om du använder kommandotolken Utvecklare uppdaterar du batchfilen som initierar miljövariablerna med de nya SDK-sökvägarna. Det här problemet kan undvikas med hjälp av Installationsprogrammet för Visual Studio för att installera uppdaterade SDK:er.

Det går inte att öppna en biblioteksfil från tredje part

Det finns flera vanliga orsaker till det här problemet:

  • Sökvägen till biblioteksfilen kan vara felaktig eller inte omsluten med dubbla citattecken. Eller så kanske du inte har angett det för länkaren.

  • Du kanske har installerat en 32-bitarsversion av biblioteket, men du skapar för 64 bitar eller tvärtom.

  • Biblioteket kan ha beroenden för andra bibliotek som inte är installerade.

Om du vill åtgärda ett sökvägsproblem för kommandoradsversioner kontrollerar du att LIB-miljövariabeln har angetts. Se till att den innehåller sökvägar för alla bibliotek som du använder och för varje konfiguration som du skapar. I IDE:t anges bibliotekssökvägarna av egenskaperna VC++ Kataloger> och Bibliotekskataloger. Kontrollera att alla kataloger som innehåller de bibliotek som du behöver finns här för varje konfiguration som du skapar.

Du kan behöva ange en bibliotekskatalog som åsidosätter en standardbibliotekskatalog. Använd alternativet på kommandoraden /LIBPATH . I IDE använder du egenskapen Ytterligare bibliotekskataloger på egenskapssidan Konfigurationsegenskaper > Linker > Allmänt för projektet.

Se till att du installerar alla versioner av biblioteket som du behöver för de konfigurationer som du skapar. Överväg att använda vcpkg-pakethanteringsverktyget för att automatisera installationen och installationen för många vanliga bibliotek. När du kan är det bäst att skapa egna kopior av bibliotek från tredje part. Sedan är du säker på att alla biblioteks lokala beroenden har skapats för samma konfigurationer som projektet.

Det går inte att öppna en fil som skapats av projektet

Du kan se det här felet om filnamnet inte finns ännu när länkaren försöker komma åt det. Det kan inträffa när ett projekt är beroende av ett annat i lösningen, men projekten skapas i fel ordning. Åtgärda det här problemet genom att kontrollera att dina projektreferenser har angetts i projektet som använder filen. Sedan skapas den saknade filen innan den krävs. Mer information finns i Lägga till referenser i Visual Studio C++-projekt och Hantera referenser i ett projekt.

Det går inte att öppna filen C:\Program.obj

Om du ser filnamnet C:\Program.obj i felmeddelandet omsluter du bibliotekssökvägarna med dubbla citattecken. Det här felet inträffar när en oinslagen sökväg som börjar med C:\Program Files skickas till linkern. Ostrukturerade sökvägar kan också orsaka liknande fel. Vanligtvis visar de en oväntad .obj fil i roten på enheten.

Om du vill åtgärda det här problemet för kommandoradsversioner kontrollerar du alternativparametrarna /LIBPATH . Kontrollera även sökvägarna som anges i LIB-miljövariabeln och sökvägarna som anges på kommandoraden. Se till att använda dubbla citattecken runt alla sökvägar som innehåller blanksteg.

Åtgärda det här problemet i IDE genom att lägga till dubbla citattecken efter behov i följande egenskaper för projektet:

  • Egenskapen Bibliotekskataloger på egenskapssidan Konfigurationsegenskaper > VC++ Kataloger ,

  • Egenskapen Ytterligare bibliotekskataloger på egenskapssidan Konfigurationsegenskaper > Linker > Allmänt ,

  • Egenskapen Ytterligare beroenden i Konfigurationsegenskaper > Linker > Indata egenskapssidan.

Andra vanliga problem

Problem med sökväg eller filnamn

Det här felet kan inträffa när bibliotekets filnamn eller sökväg som angetts för länkaren är felaktig. Eller när sökvägen har en ogiltig enhetsspecifikation. Titta på kommandoraden eller i något #pragma comment( lib, "library_name" ) direktiv för att identifiera problem. Kontrollera stavningen och filnamnstillägget och kontrollera att filen finns på den angivna platsen.

Parallell build-synkronisering

Om du använder ett alternativ för parallell version kan Visual Studio ha låst filen på en annan tråd. Du kan åtgärda problemet genom att kontrollera att samma kodobjekt eller bibliotek inte är inbyggt i flera projekt. Använd byggberoenden eller projektreferenser för att hämta inbyggda binärfiler i projektet.

Ytterligare beroenden som anges i IDE

När du anger enskilda bibliotek i egenskapen Ytterligare beroenden direkt använder du blanksteg för att separera biblioteksnamnen. Använd inte kommatecken eller semikolon. Om du använder menyalternativet Redigera för att öppna dialogrutan Ytterligare beroenden använder du nya rutor för att avgränsa namnen, inte kommatecken, semikolon eller blanksteg. Använd även newlines när du anger bibliotekssökvägar i dialogrutorna Bibliotekskataloger och Ytterligare bibliotekskataloger .

Sökvägar som är för långa

Du kan se det här felet när sökvägen för filnamnet utökas till fler än 260 tecken. Om det behövs kan du ordna om katalogstrukturen eller förkorta mapp- och filnamnen för att förkorta sökvägarna.

Filer som är för stora

Det här felet kan inträffa eftersom filen är för stor. Bibliotek eller objektfiler som är större än en gigabyte kan orsaka problem för 32-bitarslänkaren. En möjlig korrigering för det här problemet är att använda 64-bitarsverktyguppsättningen. Mer information om hur du använder 64-bitarsverktyguppsättningen på kommandoraden finns i Så här aktiverar du en 64-bitars Visual C++-verktygsuppsättning på kommandoraden. Information om hur du använder 64-bitarsverktygen i IDE finns i Använda MSBuild med 64-bitars kompilatorn och verktygen. Se även det här Stack Overflow-inlägget: Så här gör du för att Visual Studio ska använda den inbyggda verktygskedjan amd64.

Felaktiga filbehörigheter

Det här felet kan inträffa om du inte har tillräcklig filbehörighet för att komma åt filnamnet. Det kan inträffa om du använder ett vanligt användarkonto för att komma åt biblioteksfiler i skyddade systemkataloger. Eller om du använder filer som kopierats från andra användare som fortfarande har sina ursprungliga behörigheter inställda. Åtgärda problemet genom att flytta filen till en skrivbar projektkatalog. Om den flyttade filen har otillgängliga behörigheter kör du kommandot takeown.exe i ett administratörskommandofönster för att ta över ägarskapet för filen.

Otillräckligt diskutrymme

Felet kan inträffa när du inte har tillräckligt med diskutrymme. Länkaren använder tillfälliga filer i flera fall. Även om du har tillräckligt med diskutrymme kan en stor länk tömma eller fragmentera det tillgängliga diskutrymmet. Överväg att använda alternativet /OPT (optimeringar). Om du gör transitiv COMDAT-eliminering läss alla objektfiler flera gånger.

Problem i TMP-miljövariabeln

Om filnamnet heter LNKnnn är det ett filnamn som genereras av länkaren för en temporär fil. Katalogen som anges i TMP-miljövariabeln kanske inte finns. Eller så kan mer än en katalog anges för TMP-miljövariabeln. Endast en katalogsökväg ska anges för TMP-miljövariabeln.

Hjälp, mitt problem visas inte här!

När inget av problemen som anges här gäller kan du använda feedbackverktygen i Visual Studio för att få hjälp. I IDE går du till menyraden och väljer Hjälp > skicka feedback > Rapportera ett problem. Eller skicka ett förslag med hjälp av Hjälp > skicka feedback > Skicka ett förslag. Du kan också använda Q&A-webbplatsen för Microsoft Learn för frågor och webbplatsen för Visual Studio C++ Developer Community . Använd dessa webbplatser för att söka efter svar på frågor och be om hjälp. Mer information finns i Rapportera ett problem med Visual C++-verktygen eller dokumentationen.

Om du har upptäckt ett nytt sätt att åtgärda det här problemet som vi bör lägga till i den här artikeln kan du meddela oss. Du kan skicka feedback till oss med hjälp av knappen nedan för Den här sidan. Använd det för att skapa ett nytt problem i vår GitHub-lagringsplats för C++-dokumentation. Tack!