Erro fatal C1083
Não é possível abrir o arquivo tipo de arquivo: arquivo: mensagem
O compilador gera um erro C1083 quando não consegue encontrar um arquivo. Há muitas causas possíveis para esse erro. Um caminho de pesquisa de inclusão incorreto ou ausente, ou arquivos de cabeçalho com nomes incorretos, são as causas mais comuns, mas outros tipos de arquivos e problemas também podem causar C1083. Estes são alguns dos motivos comuns pelos quais o compilador gera esse erro.
O nome de arquivo especificado está errado
O nome de um arquivo pode estar digitado incorretamente. Por exemplo,
#include <algorithm.h>
pode não encontrar o arquivo desejado. A maioria dos arquivos de cabeçalho da Biblioteca Padrão do C++ não tem uma extensão de nome de .h
arquivo. Esta #include
diretiva não encontrará o <algorithm>
cabeçalho. Para corrigir esse problema, verifique se o nome de arquivo correto foi inserido, da seguinte maneira:
#include <algorithm>
Certos cabeçalhos da biblioteca CRT estão localizados em um subdiretório do diretório de inclusão padrão. Por exemplo, para incluir sys/types.h
, você deve incluir o nome do subdiretório sys
na diretiva #include
:
#include <sys/types.h>
O arquivo não está incluído no caminho de pesquisa de inclusão
O compilador não pode encontrar o arquivo usando as regras de pesquisa para a #include
diretiva or #import
. Por exemplo, quando um nome de arquivo de cabeçalho está entre aspas,
#include "myincludefile.h"
isso diz para o compilador procurar o arquivo no mesmo diretório que contém o arquivo de origem primeiro e depois procurar outros locais especificados pelo ambiente de compilação. Se as aspas contiverem um caminho absoluto, o compilador procurará somente o arquivo nesse local. Se as aspas contiverem um caminho relativo, o compilador procurará o arquivo no diretório relativo ao diretório de origem.
Se o nome estiver entre colchetes angulares,
#include <stdio.h>
o compilador seguirá um caminho de pesquisa definido pelo ambiente de compilação, pela opção do compilador /I
, pela opção do compilador /X
e pela variável de ambiente INCLUDE. Para obter mais informações, incluindo detalhes específicos sobre a ordem de pesquisa usada para localizar um arquivo, consulte Diretiva #include (C/C++) e Diretiva #import.
Se os arquivos de inclusão estiverem em outro diretório em relação ao diretório de origem e você usar um caminho relativo em suas diretivas de inclusão, deverá usar aspas duplas em vez de colchetes angulares. Por exemplo, se o arquivo de cabeçalho myheader.h
estiver em um subdiretório das fontes de seu projeto nomeadas headers, este exemplo não encontrará o arquivo e causará o erro C1083:
#include <headers\myheader.h>
mas este exemplo funciona:
#include "headers\myheader.h"
Caminhos relativos também podem ser usados com diretórios no caminho de pesquisa de inclusão. Se você adicionar um diretório à variável de ambiente INCLUDE ou ao caminho dos Diretórios de Inclusão no Visual Studio, não adicione parte do caminho às diretivas de inclusão. Por exemplo, se o cabeçalho estiver localizado em \path\example\headers\myheader.h
e você adicionar \path\example\headers\
ao caminho de Diretórios de Inclusão no Visual Studio, mas sua diretiva #include
se referir ao arquivo como
#include <headers\myheader.h>
então o arquivo não é encontrado. Use o caminho correto em relação ao diretório especificado no caminho de pesquisa de inclusão. Neste exemplo, você pode alterar o caminho de pesquisa de inclusão para \path\example\
, ou remover o segmento de caminho headers\
da diretiva #include
.
Problemas de biblioteca de terceiros e vcpkg
Se você vir esse erro ao tentar configurar uma biblioteca de terceiros como parte de seu build, considere usar o vcpkg, um gerenciador de pacotes C++, para instalar e compilar a biblioteca. O vcpkg dá suporte a uma lista de bibliotecas de terceiros grande e crescente e define todas as propriedades de configuração e dependências necessárias para builds bem-sucedidos como parte do projeto.
O arquivo está em seu projeto, mas não no caminho de pesquisa de inclusão
Mesmo quando os arquivos de cabeçalho são listados no Gerenciador de Soluções como parte de um projeto, os arquivos só são encontrados pelo compilador quando são referenciados por uma #include
diretiva or #import
em um arquivo de origem e estão localizados em um caminho de pesquisa de inclusão. Tipos diferentes de compilações podem usar caminhos de pesquisa diferentes. A opção /X
do compilador pode ser usada para excluir diretórios do caminho de pesquisa de inclusão. Isso permite que diferentes compilações usem arquivos de inclusão diferentes de mesmo nome, mas são mantidos em diretórios diferentes. Essa é uma alternativa à compilação condicional usando comandos do pré-processador. Para obter mais informações sobre a opção do compilador /X
, consulte /X
(Ignorar Caminhos de Inclusão Padrão).
Para corrigir esse problema, corrija o caminho que o compilador usa para procurar o arquivo incluído ou importado. Um novo projeto usa caminhos padrão de pesquisa de inclusão. Talvez seja necessário modificar o caminho de pesquisa de inclusão para adicionar um diretório ao seu projeto. Se você estiver compilando na linha de comando, adicione o caminho para a variável de ambiente INCLUDE ou a opção do /I
compilador para especificar o caminho para o arquivo.
Para definir o caminho do diretório de inclusão no Visual Studio, abra a caixa de diálogo Páginas de Propriedades do projeto. Selecione Diretórios VC++ em Propriedades de Configuração no painel esquerdo e edite a propriedade Diretórios de Inclusão. Para obter mais informações sobre os diretórios por usuário ou por projeto pesquisados pelo compilador no Visual Studio, consulte Página de propriedade de diretórios do VC++. Para obter mais informações sobre a opção /I
do compilador, consulte /I
(Diretórios de Inclusão Adicionais).
O ambiente INCLUDE ou LIB da linha de comando não está definido
Quando o compilador é invocado na linha de comando, variáveis de ambiente são geralmente usadas para especificar caminhos de pesquisa. Se o caminho de pesquisa descrito pela variável de ambiente INCLUDE ou LIB não estiver definido corretamente, um erro C1083 poderá ser gerado. É altamente recomendável usar um atalho de prompt de comando do desenvolvedor para definir o ambiente básico para builds de linha de comando. Para obter mais informações, confira Compilar C/C++ na linha de comando. Para obter mais informações sobre como usar variáveis de ambiente, confira Como usar variáveis de ambiente em um build.
O arquivo pode estar bloqueado ou em uso
Se você estiver usando outro programa para editar ou acessar o arquivo, ele pode ter bloqueado. Tente fechar o arquivo no outro programa. Às vezes, o outro programa pode ser o próprio Visual Studio, se você estiver usando opções de compilação paralela. Se desativar a opção de build paralela fizer o erro desaparecer, então esse era o problema. Outros sistemas de build paralelos também podem ter esse problema. Tenha cuidado para definir dependências de arquivo e projeto para que a ordem de build esteja correta. Em alguns casos, considere criar um projeto intermediário para forçar a ordem de dependência de compilação para um arquivo comum que pode ser criado por vários projetos. Às vezes, os programas antivírus bloqueiam temporariamente arquivos alterados recentemente para verificação. Se possível, considere excluir os diretórios de build do projeto do verificador antivírus.
A versão incorreta de um nome de arquivo foi incluída
Um erro C1083 também pode indicar que a versão incorreta de um arquivo foi incluída. Por exemplo, um build pode incluir a versão errada de um arquivo que tem uma #include
diretiva para um arquivo de cabeçalho que não se destina a esse build. Por exemplo, determinados arquivos podem se aplicar apenas a builds x86 ou a builds de depuração. Quando o arquivo de cabeçalho não é encontrado, o compilador gera um erro C1083. A correção desse problema é usar o arquivo correto, não adicionar o arquivo de cabeçalho ou diretório à compilação.
Os cabeçalhos pré-compilados ainda não são pré-compilados
Quando um projeto é configurado para usar cabeçalhos pré-compilados, os arquivos .pch
relevantes precisam ser criados de forma que os arquivos que usam o conteúdo do cabeçalho possam ser compilados. Por exemplo, o arquivo pch.cpp
(stdafx.cpp
no Visual Studio 2017 e anteriores) é criado automaticamente no diretório do projeto para novos projetos. Compile esse arquivo primeiro para criar os arquivos de cabeçalho pré-compilados. No design de processo de compilação típico, isso é feito automaticamente. Para obter mais informações, consulte Criar arquivos de cabeçalho pré-compilados.
Outras causas
Você instalou um SDK ou uma biblioteca de terceiros, mas não abriu um novo prompt de comando do desenvolvedor. Se o SDK ou a biblioteca adicionar arquivos ao caminho INCLUDE , talvez seja necessário abrir uma nova janela de prompt de comando do desenvolvedor para selecionar essas alterações de variável de ambiente.
O arquivo usa código gerenciado, mas a opção
/clr
do compilador não é especificada. Para obter mais informações, confira/clr
(Compilação do Common Language Runtime).O arquivo é compilado usando uma definição de opção do compilador
/analyze
diferente da que é usada para pré-compilar os cabeçalhos. Quando os cabeçalhos de um projeto são pré-compilados, todos devem usar as mesmas definições de/analyze
. Para obter mais informações, confira/analyze
(Análise de código).O arquivo ou diretório foi criado pelo Subsistema do Windows para Linux, a diferenciação de maiúsculas e minúsculas por diretório está habilitada e as maiúsculas e minúsculas especificadas de um caminho ou arquivo não correspondem às maiúsculas e minúsculas do caminho ou arquivo no disco.
O arquivo, o diretório ou o disco é somente leitura.
O Visual Studio ou as ferramentas de linha de comando não têm permissões suficientes para ler o arquivo ou o diretório. Isso pode acontecer, por exemplo, quando os arquivos de projeto têm propriedade diferente do processo que executa o Visual Studio ou as ferramentas de linha de comando. Às vezes, esse problema pode ser corrigido executando como Administrador o Visual Studio ou o prompt de comando do desenvolvedor.
Não há identificadores de arquivo suficientes. Feche alguns aplicativos e recompile-os. Essa condição é incomum em circunstâncias normais. No entanto, pode ocorrer quando projetos grandes são compilados em um computador com memória física limitada.
Exemplo
O exemplo a seguir gera um erro C1083 quando o arquivo "test.h"
de cabeçalho não existe no diretório de origem ou no caminho de pesquisa de inclusão.
// C1083.cpp
// compile with: /c
#include "test.h" // C1083 test.h doesn't exist
#include "stdio.h" // OK
Para obter informações sobre como compilar projetos C/C++ no IDE ou na linha de comando e informações sobre a definição de variáveis de ambiente, consulte Sistemas de projetos e compilação.