Compartir a través de


Error irrecuperable C1083

No se puede abrir el archivo tipo_de_archivo: 'archivo': mensaje

El compilador genera un error C1083 cuando no encuentra un archivo. Hay muchas causas posibles de este error. Las causas más comunes son una ruta de búsqueda de inclusión incorrecta o que falten archivos de encabezado o tengan un nombre incorrecto, pero otros tipos de archivo y problemas también pueden producir el error C1083. A continuación se indican los motivos habituales por los que el compilador genera este error.

El nombre de archivo especificado es incorrecto

El nombre de un archivo podría estar mal escrito. Por ejemplo,

#include <algorithm.h>

no se encuentra el archivo deseado. La mayoría de los archivos de encabezado de la biblioteca estándar de C++ no tienen una .h extensión de nombre de archivo. Esta #include directiva no encontrará el <algorithm> encabezado . Para corregir este problema, compruebe que se escribe el nombre de archivo correcto, como se indica a continuación:

#include <algorithm>

Algunos encabezados de la biblioteca de C en tiempo de ejecución se encuentran en un subdirectorio del directorio de inclusión estándar. Por ejemplo, para incluir sys/types.h, debe incluir el nombre del subdirectorio sys en la directiva #include:

#include <sys/types.h>

El archivo no se incluye en la ruta de acceso de búsqueda de inclusión

El compilador no puede encontrar el archivo mediante las reglas de búsqueda de la #include directiva o #import . Por ejemplo, un nombre de archivo de encabezado entre comillas

#include "myincludefile.h"

le indica al compilador que busque primero el archivo en el mismo directorio que contiene el archivo de código fuente y que luego busque en otras ubicaciones especificadas por el entorno de compilación. Si las comillas contienen una ruta de acceso absoluta, el compilador solo busca el archivo en esa ubicación. Si las comillas contienen una ruta de acceso relativa, el compilador busca el archivo en el directorio relativo al directorio de origen.

Si el nombre está entre corchetes angulares,

#include <stdio.h>

el compilador sigue una ruta de búsqueda definida por el entorno de compilación, las opciones /I y /X del compilador y la variable de entorno INCLUDE. Para obtener más información, incluidos detalles específicos sobre el orden de búsqueda que se usa para buscar un archivo, consulte #include (directiva) (C/C++) e #import (directiva).

Si los archivos de inclusión están en otro directorio relativo al directorio de origen y usa una ruta de acceso relativa en las directivas include, debe usar comillas dobles en lugar de corchetes angulares. Por ejemplo, si el archivo de encabezado myheader.h está en un subdirectorio de los orígenes del proyecto denominado headers, en el siguiente ejemplo no se encuentra el archivo y se produce el error C1083:

#include <headers\myheader.h>

Pero este ejemplo sí funciona:

#include "headers\myheader.h"

Las rutas de acceso relativas también se pueden usar para directorios en la ruta de búsqueda de inclusión. Si agrega un directorio a la variable de entorno INCLUDE o a la ruta de acceso Directorios de inclusión en Visual Studio, no agregue parte de la ruta de acceso a las directivas include. Por ejemplo, si el encabezado se encuentra en \path\example\headers\myheader.h y agrega \path\example\headers\ a la ruta de acceso de Directorios de inclusión en Visual Studio, pero la directiva #include hace referencia al archivo como

#include <headers\myheader.h>

a continuación, no se encuentra el archivo. Use la ruta de acceso correcta relativa al directorio especificado en la ruta de búsqueda de inclusión. En este ejemplo, podría cambiar la ruta de búsqueda de inclusión a \path\example\ o quitar el segmento headers\ de la ruta de acceso de la directiva #include.

Problemas de bibliotecas de terceros y vcpkg

Si ve este error al intentar configurar una biblioteca de terceros como parte de la compilación, considere la posibilidad de usar vcpkg, un administrador de paquetes de C++, para instalar y compilar la biblioteca. vcpkg admite una larga lista de bibliotecas de terceros que sigue aumentando y establece todas las propiedades de configuración y las dependencias necesarias para lograr compilaciones correctas como parte del proyecto.

El archivo está en el proyecto, pero no en la ruta de búsqueda de inclusión

Incluso cuando los archivos de encabezado se muestran en Explorador de soluciones como parte de un proyecto, el compilador solo los encuentra cuando se hace referencia a ellos por una #include directiva o #import en un archivo de origen y se encuentran en una ruta de búsqueda de inclusión. Los diferentes tipos de compilaciones podrían usar distintas rutas de búsqueda. La opción /X del compilador se puede utilizar para excluir directorios de la ruta de búsqueda de inclusión. Esto permite que distintas compilaciones puedan usar diferentes archivos de inclusión que tienen el mismo nombre, pero se mantienen en directorios distintos. Ésta es una alternativa a la compilación condicional utilizando los comandos de preprocesador. Para obtener más información sobre la opción /X del compilador, consulte /X (ignorar rutas de acceso de inclusión estándar).

Para corregir este problema, corrija la ruta que el compilador utiliza para buscar el archivo incluido o importado. Un nuevo proyecto usa las rutas de búsqueda de inclusión predeterminadas. Es posible que tenga que modificar la ruta de acceso de búsqueda de inclusión para agregar un directorio para el proyecto. Si va a compilar en la línea de comandos, agregue la ruta de acceso a la variable de entorno INCLUDE o la /I opción del compilador para especificar la ruta de acceso al archivo.

Para establecer la ruta de acceso de inclusión del directorio en Visual Studio, abra el cuadro de diálogo Páginas de propiedades del proyecto. Seleccione Directorios de VC++ en Propiedades de configuración en el panel izquierdo y, a continuación, edite la propiedad Directorios de inclusión. Para obtener más información sobre los directorios de cada usuario y cada proyecto incluidos en las búsquedas del compilador de Visual Studio, consulte Directorios de VC++ (Página de propiedades) (Windows). Para obtener más información sobre la opción /I del compilador, consulte /I (directorios de inclusión adicionales).

El entorno INCLUDE o LIB de la línea de comandos no está establecido.

Cuando el compilador se invoca en la línea de comandos, suelen usarse las variables de entorno para especificar rutas de búsqueda. Si la ruta de acceso de búsqueda descrita por la variable de entorno INCLUDE o LIB no se ha ajustado correctamente, se puede generar un error C1083. Se recomienda encarecidamente usar un acceso directo al Símbolo del sistema para desarrolladores con el fin de establecer el entorno básico para las compilaciones de la línea de comandos. Para obtener más información, consulte Uso del conjunto de herramientas de Microsoft C++ desde la línea de comandos. Para obtener más información sobre el uso de variables de entorno, consulte Uso de variables de entorno en una compilación.

Es posible que el archivo esté bloqueado o en uso.

Si usa otro programa para editar o acceder al archivo, es posible que tenga el archivo bloqueado. Pruebe cerrando el archivo en el otro programa. A veces, el otro programa puede ser Visual Studio, si usa opciones de compilación paralelas. Si al desactivar la opción de compilación paralela, el error desaparece, este es el problema. Otros sistemas de compilación en paralelo también pueden tener este problema. Tenga cuidado al establecer las dependencias de archivos y del proyecto para que el orden de compilación sea el correcto. En algunos casos, considere la posibilidad de crear un proyecto intermedio para forzar el orden de dependencias de compilación para un archivo común que podrían compilar varios proyectos. A veces, los programas antivirus bloquean temporalmente los archivos modificados recientemente para examinarlos. Si es posible, considere la posibilidad de excluir los directorios de compilación del proyecto del examen del antivirus.

Se ha incluido una versión incorrecta de un nombre de archivo

Un error C1083 también puede indicar que la versión incorrecta de un archivo está incluida. Por ejemplo, una compilación podría incluir la versión incorrecta de un archivo que tiene una #include directiva para un archivo de encabezado que no está pensado para esa compilación. Por ejemplo, determinados archivos solo se pueden aplicar a compilaciones x86 o a compilaciones de depuración. Cuando no se encuentra el archivo de encabezado, el compilador genera un error C1083. La corrección para este problema es utilizar el archivo correcto y no agregar el archivo de encabezado o directorio a la compilación.

Los encabezados precompilados aún no están precompilados

Cuando se configura un proyecto para usar encabezados precompilados, se tienen que crear los archivos .pch pertinentes para que puedan compilarse los archivos que utilizan el contenido del encabezado. Por ejemplo, el archivo pch.cpp (stdafx.cpp en Visual Studio 2017 y versiones anteriores) se crea automáticamente en el directorio del proyecto para los nuevos proyectos. Se compila primero el archivo para crear archivos de encabezado precompilados. En el diseño típico del proceso de compilación, esto se hace automáticamente. Para obtener más información, consulte Archivos de encabezado precompilados.

Otras causas

  • Ha instalado un SDK o una biblioteca de terceros, pero no ha abierto un nuevo símbolo del sistema para desarrolladores. Si el SDK o la biblioteca agrega archivos a la ruta de acceso INCLUDE , es posible que tenga que abrir una nueva ventana del símbolo del sistema para desarrolladores para seleccionar estos cambios de variable de entorno.

  • El archivo usa código administrado, pero no se especifica la opción /clr del compilador. Para obtener más información, consulte /clr (compilación con Common Language Runtime).

  • El archivo se compila usando una configuración de la opción /analyze del compilador diferente de la que se usa para precompilar los encabezados. Cuando los encabezados de un proyecto se precompilan, todos deben usar la misma configuración de /analyze. Para obtener más información, consulte /analyze (análisis de código).

  • El archivo o directorio lo creó el Subsistema de Windows para Linux, la distinción entre mayúsculas y minúsculas por directorio está habilitada y el caso especificado de una ruta de acceso o archivo no coincide con el caso de la ruta de acceso o el archivo en el disco.

  • El archivo, el directorio o el disco es de solo lectura.

  • Visual Studio o las herramientas de línea de comandos no tienen permisos suficientes para leer el archivo o el directorio. Esto puede ocurrir, por ejemplo, cuando los archivos del proyecto tienen un propietario diferente al proceso que se ejecuta Visual Studio o las herramientas de la línea de comandos. A veces, este problema se puede solucionar ejecutando Visual Studio o el símbolo del Sistema para desarrolladores como administrador.

  • No hay suficientes identificadores de archivo. Cierre algunas aplicaciones y, a continuación, compile de nuevo. Esta condición es poco habitual en circunstancias normales. Sin embargo, puede aparecer cuando se compilan proyectos grandes en un equipo con memoria física limitada.

Ejemplo

En el ejemplo siguiente se genera un error C1083 cuando el archivo "test.h" de encabezado no existe en el directorio de origen o en la ruta de acceso de búsqueda de inclusión.

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

Para obtener información sobre cómo compilar proyectos de C/C++ en el IDE o en la línea de comandos y cómo establecer variables de entorno, consulte Proyectos y sistemas de compilación de C/C++ en Visual Studio.

Consulte también