Condividi tramite


Errore degli strumenti del linker LNK1104

impossibile aprire il file 'filename'

Questo errore viene segnalato quando il linker non riesce ad aprire un file, sia per la lettura che per la scrittura. Le due cause più comuni del problema sono:

  • il programma è già in esecuzione o viene caricato nel debugger e

  • I percorsi della libreria non sono corretti o non sono racchiusi tra virgolette doppie.

Esistono molte altre possibili cause per questo errore. Per restringerli, controllare prima di tutto il tipo di nome file . Usare quindi le sezioni seguenti per identificare e risolvere il problema specifico.

Non è possibile aprire l'app o il relativo file con estensione pdb

L'app è in esecuzione o viene caricata nel debugger

Quando il nome del file è il nome del file eseguibile o un file con estensione pdb associato, verificare se l'applicazione è già in esecuzione. Controllare quindi se è caricato in un debugger. Per risolvere questo problema, arrestare il programma e scaricarlo dal debugger prima di compilarlo di nuovo. Se l'app è aperta in un altro programma, ad esempio un editor di risorse, chiuderla. Se il programma non risponde, potrebbe essere necessario usare Gestione attività per terminare il processo. Potrebbe anche essere necessario chiudere e riavviare Visual Studio.

L'app è bloccata da un'analisi antivirus

I programmi antivirus spesso bloccano temporaneamente l'accesso ai file appena creati, in particolare .exe e .dll file eseguibili. Per risolvere questo problema, provare ad escludere le directory di compilazione del progetto dallo scanner antivirus.

Non è possibile aprire un file di libreria Microsoft

Librerie di Windows, ad esempio kernel32.lib

Se il file che non può essere aperto è uno dei file di libreria standard forniti da Microsoft, ad esempio kernel32.lib, potrebbe verificarsi un errore di configurazione del progetto o un errore di installazione. Verificare che Windows SDK sia installato. Se il progetto richiede altre librerie Microsoft, ad esempio MFC, assicurarsi che i componenti MFC siano stati installati anche dal programma di installazione di Visual Studio. È possibile eseguire di nuovo il programma di installazione per aggiungere componenti facoltativi in qualsiasi momento. Per altre informazioni, vedere Modificare Visual Studio. Usare la scheda Singoli componenti nel programma di installazione per scegliere librerie e SDK specifici.

Librerie vcruntime con controllo delle versioni

Se il messaggio di errore include una libreria Microsoft con controllo delle versioni, ad esempio msvcr120.lib, il set di strumenti della piattaforma per tale versione del compilatore potrebbe non essere installato. Per risolvere questo problema, sono disponibili due opzioni: aggiornare il progetto per usare il set di strumenti della piattaforma corrente oppure installare il set di strumenti precedente e compilare il progetto senza modifiche. Per altre informazioni, vedere Aggiornamento di progetti da versioni precedenti di Visual C++ e Usare multitargeting nativo in Visual Studio per compilare progetti precedenti.

Librerie specifiche per la vendita al dettaglio, il debug o la piattaforma

L'errore può verificarsi quando si compila per la prima volta per una nuova piattaforma o configurazione di destinazione, ad esempio Retail o ARM64. Nell'IDE verificare che il set di strumenti della piattaforma e la versione di Windows SDK specificati nella pagina delle proprietà Generale siano installati. Verificare anche che le librerie necessarie siano disponibili nelle directory di libreria specificate nella pagina delle proprietà Directory di VC++. Controllare le proprietà per ogni configurazione, ad esempio Debug, Retail, x86 o ARM64. Se una compilazione funziona ma un'altra non, confrontare le impostazioni per entrambe. Installare gli strumenti e le librerie necessari mancanti.

Libreria vccorlib.lib

Non esistono librerie con mitigazione Spectre per app o componenti UWP (Universal Windows). Se il messaggio di errore include vccorlib.lib, potrebbe essere stato abilitato /Qspectre in un progetto UWP. Disabilitare l'opzione del /Qspectre compilatore per risolvere il problema. In Visual Studio modificare la proprietà Spectre Mitigation . Si trova nella pagina C/C++>Code Generation della finestra di dialogo Pagine delle proprietà del progetto.

Librerie nei progetti da origini online o altre

Se si compila un progetto copiato da un altro computer, i percorsi di installazione della libreria potrebbero essere diversi. Per le compilazioni della riga di comando, verificare che i percorsi della variabile di ambiente e della libreria LIB siano impostati correttamente per la compilazione. In Visual Studio è possibile visualizzare e modificare i percorsi di libreria correnti impostati nelle pagine delle proprietà per il progetto. Nella pagina Directory di VC++ scegliere il controllo a discesa per la proprietà Directory di libreria, quindi scegliere Modifica. Nella sezione Valore valutato della finestra di dialogo Directory di libreria sono elencati i percorsi correnti cercati per i file di libreria. Aggiornare questi percorsi in modo che puntino alle librerie locali.

Librerie di Windows SDK aggiornate

Questo errore può verificarsi quando il percorso di Visual Studio per Windows SDK non è aggiornato. Può verificarsi se si installa un windows SDK più recente indipendentemente dal programma di installazione di Visual Studio. Per correggerlo nell'IDE, aggiornare i percorsi specificati nella pagina delle proprietà Directory di VC++. Impostare la versione nel percorso in modo che corrisponda al nuovo SDK. Se si usa il prompt dei comandi per gli sviluppatori, aggiornare il file batch che inizializza le variabili di ambiente con i nuovi percorsi SDK. Questo problema può essere evitato usando il programma di installazione di Visual Studio per installare gli SDK aggiornati.

Non è possibile aprire un file di libreria di terze parti

Esistono diverse cause comuni per questo problema:

  • Il percorso del file di libreria potrebbe non essere corretto o non racchiuso tra virgolette doppie. In alternativa, potrebbe non essere stato specificato al linker.

  • È possibile che sia stata installata una versione a 32 bit della libreria, ma si sta creando per 64 bit o in altro modo.

  • La libreria potrebbe avere dipendenze da altre librerie non installate.

Per risolvere un problema di percorso per le compilazioni da riga di comando, verificare che la variabile di ambiente LIB sia impostata. Assicurarsi che includa percorsi per tutte le librerie usate e per ogni configurazione compilata. Nell'IDE i percorsi delle librerie vengono impostati dalla proprietà Directory della>libreria DI VC++. Assicurarsi che tutte le directory che contengono le librerie necessarie siano elencate qui per ogni configurazione compilata.

Potrebbe essere necessario specificare una directory di libreria che esegue l'override di una directory di libreria standard. Nella riga di comando usare l'opzione /LIBPATH . Nell'IDE usare la proprietà Directory librerie aggiuntive nella pagina delle proprietà Proprietà di configurazione > Linker > Generale del progetto.

Assicurarsi di installare ogni versione della libreria necessaria per le configurazioni compilate. È consigliabile usare l'utilità di gestione dei pacchetti vcpkg per automatizzare l'installazione e la configurazione per molte librerie comuni. Quando è possibile, è consigliabile creare copie personalizzate di librerie di terze parti. Assicurarsi quindi di avere tutte le dipendenze locali delle librerie, compilate per le stesse configurazioni del progetto.

Non è possibile aprire un file compilato dal progetto

Questo errore potrebbe verificarsi se il nome del file non esiste ancora quando il linker tenta di accedervi. Può verificarsi quando un progetto dipende da un altro nella soluzione, ma i progetti vengono compilati nell'ordine errato. Per risolvere questo problema, assicurarsi che i riferimenti al progetto siano impostati nel progetto che usa il file. Il file mancante viene quindi compilato prima che sia necessario. Per altre informazioni, vedere Aggiunta di riferimenti nei progetti C++ di Visual Studio e Gestione dei riferimenti in un progetto.

Impossibile aprire il file 'C:\Program.obj'

Se viene visualizzato il nome file C:\Program.obj nel messaggio di errore, eseguire il wrapping dei percorsi della libreria tra virgolette doppie. Questo errore si verifica quando al linker viene passato un percorso non sottoposto a wrapping che inizia con C:\Programmi . I percorsi non compressi possono anche causare errori simili. In genere, mostrano un file .obj imprevisto nella radice dell'unità.

Per risolvere questo problema per le compilazioni della riga di comando, controllare i parametri dell'opzione /LIBPATH . Controllare anche i percorsi specificati nella variabile di ambiente LIB e i percorsi specificati nella riga di comando. Assicurarsi di usare virgolette doppie per tutti i percorsi che includono spazi.

Per risolvere questo problema nell'IDE, aggiungere virgolette doppie in base alle proprietà seguenti per il progetto:

  • Proprietà Directory della libreria nella pagina delle proprietà Directory > di configurazione di VC++ ,

  • Proprietà Directory di libreria aggiuntive nella pagina delle > proprietà Proprietà di configurazione Linker > Generale,

  • Proprietà Dipendenze aggiuntive nella pagina delle proprietà Input del linker > delle proprietà Proprietà > di configurazione.

Altri problemi comuni

Problemi relativi a percorso o nome file

Questo errore può verificarsi quando il nome file o il percorso della libreria specificato al linker non è corretto. In alternativa, quando il percorso ha una specifica di unità non valida. Cercare la riga di comando o in qualsiasi #pragma commento( lib, direttiva "library_name" ) per i problemi. Controllare l'ortografia e l'estensione del file e verificare che il file esista nel percorso specificato.

Sincronizzazione parallela della compilazione

Se si usa un'opzione di compilazione parallela, Visual Studio potrebbe aver bloccato il file in un altro thread. Per risolvere questo problema, verificare che lo stesso oggetto di codice o la stessa libreria non sia compilato in più progetti. Usare le dipendenze di compilazione o i riferimenti al progetto per raccogliere file binari compilati nel progetto.

Dipendenze aggiuntive specificate nell'IDE

Quando si specificano direttamente singole librerie nella proprietà Dipendenze aggiuntive , usare gli spazi per separare i nomi delle librerie. Non usare virgole o punti e virgola. Se si usa la voce di menu Modifica per aprire la finestra di dialogo Dipendenze aggiuntive , utilizzare le nuove righe per separare i nomi, non le virgole, i punti e virgola o gli spazi. Usare anche le nuove righe quando si specificano i percorsi di libreria nelle directory di libreria e nelle directory di libreria aggiuntive finestre di dialogo.

Percorsi troppo lunghi

Questo errore potrebbe verificarsi quando il percorso del nome file si espande fino a più di 260 caratteri. Se necessario, riorganizzare la struttura di directory o abbreviare i nomi di cartella e file per abbreviare i percorsi.

File troppo grandi

Questo errore può verificarsi perché il file è troppo grande. Le librerie o i file oggetto di dimensioni superiori a un gigabyte possono causare problemi per il linker a 32 bit. Una possibile correzione per questo problema consiste nell'usare il set di strumenti a 64 bit. Per altre informazioni su come usare il set di strumenti a 64 bit nella riga di comando, vedere Procedura: Abilitare un set di strumenti visual C++ a 64 bit nella riga di comando. Per informazioni su come usare il set di strumenti a 64 bit nell'IDE, vedere Uso di MSBuild con il compilatore e gli strumenti a 64 bit. Vedere anche questo post di Stack Overflow: Come usare Visual Studio usando la toolchain amd64 nativa.

Autorizzazioni file non corrette

Questo errore può verificarsi se si dispone di autorizzazioni file insufficienti per accedere al nome file. Può verificarsi se si usa un account utente comune per accedere ai file di libreria nelle directory di sistema protette. In alternativa, se si usano file copiati da altri utenti che dispongono ancora delle autorizzazioni originali impostate. Per risolvere questo problema, spostare il file in una directory di progetto scrivibile. Se il file spostato dispone di autorizzazioni inaccessibili, eseguire il comando takeown.exe in una finestra di comando amministratore per acquisire la proprietà del file.

Spazio su disco insufficiente

L'errore può verificarsi quando lo spazio su disco non è sufficiente. Il linker usa i file temporanei in vari casi. Anche se si dispone di spazio su disco sufficiente, un collegamento di grandi dimensioni può esaurire o frammentare lo spazio disponibile su disco. È consigliabile usare l'opzione /OPT (Ottimizzazioni). L'eliminazione COMDAT transitiva legge più volte tutti i file oggetto.

Problemi nella variabile di ambiente TMP

Se il nome file è denominato LNKnnn, si tratta di un nome file generato dal linker per un file temporaneo. La directory specificata nella variabile di ambiente TMP potrebbe non esistere. In alternativa, è possibile specificare più directory per la variabile di ambiente TMP. È necessario specificare un solo percorso di directory per la variabile di ambiente TMP.

Aiuto, il mio problema non è elencato qui!

Quando nessuno dei problemi elencati qui si applica, è possibile usare gli strumenti di feedback in Visual Studio per assistenza. Nell'IDE passare alla barra dei menu e scegliere Guida Invia > commenti e suggerimenti > Segnala un problema. In alternativa, inviare un suggerimento usando la Guida > per inviare commenti e > suggerimenti. È anche possibile usare il sito domande e risposte di Microsoft Learn e il sito Web della community per sviluppatori di Visual Studio C++. Usare questi siti per cercare le risposte alle domande e chiedere assistenza. Per altre informazioni, vedere Come segnalare un problema con il set di strumenti o la documentazione di Visual C++.

Se è stato scoperto un nuovo modo per risolvere questo problema da aggiungere a questo articolo, segnalarlo. È possibile inviare commenti e suggerimenti usando il pulsante seguente per questa pagina. Usarlo per creare un nuovo problema nel repository GitHub della documentazione di C++. Grazie.