Condividi tramite


Errore irreversibile C1083

Impossibile aprire il file di tipo file: 'file': messaggio

Il compilatore genera un errore C1083 quando non riesce a trovare un file. Esistono molte possibili cause per questo errore. Un percorso di ricerca errato o i file di intestazione mancanti o denominati in modo errato sono le cause più comuni, ma altri tipi di file e problemi possono anche causare C1083. Ecco alcuni dei motivi comuni per cui il compilatore genera questo errore.

Il nome file specificato non è corretto

Il nome di un file potrebbe essere digitato erroneamente. ad esempio:

#include <algorithm.h>

potrebbe non trovare il file richiesto. La maggior parte dei file di intestazione della libreria standard C++ non ha un'estensione del .h nome file. Questa #include direttiva non troverà l'intestazione <algorithm> . Per risolvere questo problema, verificare che venga immesso il nome file corretto, come indicato di seguito:

#include <algorithm>

Alcune intestazioni della libreria di runtime C risiedono in una sottodirectory della directory include standard. Ad esempio, per includere sys/types.h, è necessario includere il sys nome della #include sottodirectory nella direttiva :

#include <sys/types.h>

Il file non è incluso nel percorso di ricerca di inclusione

Il compilatore non riesce a trovare il file usando le regole di ricerca per la #include direttiva o #import . Ad esempio, quando un nome di file di intestazione è racchiuso tra virgolette,

#include "myincludefile.h"

in questo modo il compilatore deve cercare il file nella stessa directory contenente prima il file di origine e quindi cercare in altri percorsi specificati dall'ambiente di compilazione. Se le virgolette contengono un percorso assoluto, il compilatore cerca il file solo in quel percorso. Se le virgolette contengono un percorso relativo, il compilatore cerca il file nella directory relativa alla directory di origine.

Se il nome è racchiuso tra parentesi angolari,

#include <stdio.h>

Il compilatore segue un percorso di ricerca definito dall'ambiente di compilazione, l'opzione /I del compilatore, l'opzione del /X compilatore e la variabile di ambiente INCLUDE . Per altre informazioni, inclusi dettagli specifici sull'ordine di ricerca usato per trovare un file, vedere direttiva #include (C/C++) e direttiva #import.

Se i file di inclusione si trovano in un'altra directory rispetto alla directory di origine e si usa un percorso relativo nelle direttive di inclusione, è necessario usare virgolette doppie anziché parentesi angolari. Ad esempio, se il file myheader.h di intestazione si trova in una sottodirectory delle origini di progetto denominate headers, questo esempio non riesce a trovare il file e causa C1083:

#include <headers\myheader.h>

ma questo esempio funziona:

#include "headers\myheader.h"

I percorsi relativi possono essere usati anche con le directory nel percorso di ricerca di inclusione. Se si aggiunge una directory alla variabile di ambiente INCLUDE o al percorso Includi directory in Visual Studio, non aggiungere parte del percorso alle direttive di inclusione. Ad esempio, se l'intestazione si trova in \path\example\headers\myheader.he si aggiunge \path\example\headers\ al percorso delle directory di inclusione in Visual Studio, ma la #include direttiva fa riferimento al file come

#include <headers\myheader.h>

quindi il file non viene trovato. Usare il percorso corretto relativo alla directory specificata nel percorso di ricerca di inclusione. In questo esempio è possibile modificare il percorso di ricerca di inclusione in \path\example\o rimuovere il segmento di headers\ percorso dalla #include direttiva .

Problemi di libreria di terze parti e vcpkg

Se viene visualizzato questo errore quando si tenta di configurare una libreria di terze parti come parte della compilazione, provare a usare vcpkg, uno strumento di gestione pacchetti C++ per installare e compilare la libreria. vcpkg supporta un elenco di librerie di terze parti di grandi dimensioni e imposta tutte le proprietà e le dipendenze di configurazione necessarie per le compilazioni riuscite come parte del progetto.

Il file si trova nel progetto, ma non nel percorso di ricerca di inclusione

Anche quando i file di intestazione sono elencati in Esplora soluzioni come parte di un progetto, i file vengono trovati dal compilatore solo quando vengono indicati da una #include direttiva o #import in un file di origine e si trovano in un percorso di ricerca di inclusione. Tipi diversi di compilazioni possono utilizzare percorsi di ricerca diversi. L'opzione /X del compilatore può essere usata per escludere le directory dal percorso di ricerca di inclusione. In questo modo, compilazioni diverse possono utilizzare file di inclusione diversi con lo stesso nome, ma archiviati in directory diverse. Si tratta di un'alternativa alla compilazione condizionale utilizzando i comandi del preprocessore. Per altre informazioni sull'opzione del compilatore, vedere (Ignora percorsi di inclusione standard).For more information about the /X compiler option, see /X (Ignore Standard Include Paths).

Per risolvere il problema, correggere il percorso usato dal compilatore per trovare il file importato o incluso. Un nuovo progetto usa i percorsi di ricerca predefiniti. Potrebbe essere necessario modificare il percorso di ricerca di inclusione per aggiungere una directory per il progetto. Se si esegue la compilazione nella riga di comando, aggiungere il percorso alla variabile di ambiente INCLUDE o all'opzione /I del compilatore per specificare il percorso del file.

Per impostare il percorso della directory di inclusione in Visual Studio, aprire la finestra di dialogo Pagine delle proprietà del progetto. Selezionare Directory di VC++ in Proprietà di configurazione nel riquadro sinistro e quindi modificare la proprietà Includi directory. Per altre informazioni sulle directory per utente e per progetto ricercate dal compilatore in Visual Studio, vedere Pagina delle proprietà Directory di VC++. Per altre informazioni sull'opzione del /I compilatore, vedere /I (Directory di inclusione aggiuntive).

L'ambiente INCLUDE o LIB della riga di comando non è impostato

Quando il compilatore viene richiamato sulla riga di comando, vengono spesso utilizzate variabili di ambiente per specificare i percorsi di ricerca. Se il percorso di ricerca descritto dalla variabile di ambiente INCLUDE o LIB non è impostato correttamente, è possibile generare un errore C1083. È consigliabile usare un collegamento al prompt dei comandi per gli sviluppatori per impostare l'ambiente di base per le compilazioni della riga di comando. Per altre informazioni, vedere Compilare C/C++ nella riga di comando. Per altre informazioni su come usare le variabili di ambiente, vedere Procedura: Usare le variabili di ambiente in una compilazione.

Il file potrebbe essere bloccato o in uso

Se si usa un altro programma per modificare o accedere al file, il file potrebbe essere bloccato. Provare a chiudere il file nell'altro programma. In alcuni casi l'altro programma può essere Visual Studio stesso, se si usano opzioni di compilazione parallele. Se l'opzione di compilazione parallela disattiva l'errore, questo è il problema. Anche altri sistemi di compilazione paralleli possono avere questo problema. Prestare attenzione a impostare le dipendenze di file e progetti in modo che l'ordine di compilazione sia corretto. In alcuni casi, prendere in considerazione la creazione di un progetto intermedio per forzare l'ordine delle dipendenze di compilazione per un file comune che potrebbe essere compilato da più progetti. Talvolta i programmi antivirus bloccano temporaneamente i file modificati di recente per l'analisi. Se possibile, prendere in considerazione l'esclusione delle directory di compilazione del progetto dallo scanner antivirus.

Inclusione di una versione non corretta di un nome file

L'errore C1083 può anche indicare che è stata inclusa la versione non corretta di un file. Ad esempio, una compilazione potrebbe includere la versione errata di un file con una #include direttiva per un file di intestazione che non è destinato a tale compilazione. Ad esempio, alcuni file potrebbero essere applicabili solo alle compilazioni x86 o alle compilazioni di debug. Quando il file di intestazione non viene trovato, il compilatore genera un errore C1083. La soluzione al problema consiste nell'utilizzare il file corretto e non nell'aggiungere il file di intestazione o la directory alla compilazione.

Le intestazioni precompilate non sono ancora precompilate

Quando un progetto è configurato per l'uso di intestazioni precompilate, è necessario creare i file pertinenti .pch in modo che i file che utilizzano il contenuto dell'intestazione possano essere compilati. Ad esempio, il pch.cpp file (stdafx.cpp in Visual Studio 2017 e versioni precedenti) viene creato automaticamente nella directory del progetto per i nuovi progetti. Compilare innanzitutto il file per creare i file di intestazione precompilati. Nella progettazione tipica del processo di compilazione, questa operazione viene eseguita automaticamente. Per altre informazioni, vedere Creazione di file di intestazione precompilati.

Altre cause

  • È stato installato un SDK o una libreria di terze parti, ma non è stato aperto un nuovo prompt dei comandi per sviluppatori. Se l'SDK o la libreria aggiunge file al percorso INCLUDE , potrebbe essere necessario aprire una nuova finestra del prompt dei comandi per gli sviluppatori per selezionare queste modifiche alle variabili di ambiente.

  • Il file usa codice gestito, ma l'opzione /clr del compilatore non è specificata. Per altre informazioni, vedere /clr (Compilazione Common Language Runtime).

  • Il file viene compilato usando un'impostazione diversa /analyze dell'opzione del compilatore rispetto a quella usata per precompilare le intestazioni. Quando le intestazioni per un progetto sono precompilate, tutte devono usare le stesse /analyze impostazioni. Per altre informazioni, vedere /analyze (Analisi del codice).

  • Il file o la directory è stata creata dal sottosistema Windows per Linux, la distinzione tra maiuscole e minuscole per directory è abilitata e il caso specificato di un percorso o di un file non corrisponde al caso del percorso o del file su disco.

  • Il file, la directory o il disco è di sola lettura.

  • Visual Studio o gli strumenti da riga di comando non dispongono di autorizzazioni sufficienti per leggere il file o la directory. Ciò può verificarsi, ad esempio, quando i file di progetto hanno una proprietà diversa rispetto al processo che esegue Visual Studio o agli strumenti da riga di comando. A volte questo problema può essere risolto eseguendo Visual Studio o il prompt dei comandi per gli sviluppatori come Amministrazione istrator.

  • Non sono disponibili handle di file sufficienti. Chiudere alcune applicazioni e compilare nuovamente. Questa condizione è insolita in circostanze tipiche. Può tuttavia verificarsi quando vengono compilati progetti di grandi dimensioni in un computer con memoria fisica limitata.

Esempio

L'esempio seguente genera un errore C1083 quando il file "test.h" di intestazione non esiste nella directory di origine o nel percorso di ricerca di inclusione.

// C1083.cpp
// compile with: /c
#include "test.h"   // C1083 test.h doesn't exist
#include "stdio.h"  // OK

Per informazioni su come compilare progetti C/C++ nell'IDE o nella riga di comando e informazioni sull'impostazione delle variabili di ambiente, vedere Progetti e sistemi di compilazione.

Vedi anche