Error de las herramientas del vinculador LNK1104

no se puede abrir el archivo "nombre de archivo"

Este error se notifica cuando el enlazador no puede abrir un archivo, ya sea para lectura o escritura. Las dos causas más comunes del problema son las siguientes:

  • el programa ya se está ejecutando o está cargada en el depurador, y

  • las rutas de acceso de la biblioteca no son correctas o no se escriben entre comillas dobles.

Existen otras causas posibles para este error. Para restringirlas, compruebe primero qué tipo de archivo es nombre de archivo. Después, use las secciones siguientes para ayudar a identificar y corregir el problema específico.

No se puede abrir la aplicación ni su archivo .pdb

La aplicación se está ejecutando o se carga en el depurador

Cuando nombre de archivo es el nombre del archivo ejecutable o un archivo .pdb asociado, vea si la aplicación ya se está ejecutando. Después, compruebe si está cargada en un depurador. Para corregir este problema, detenga el programa y descárguelo del depurador antes de volver a compilarlo. Si la aplicación está abierta en otro programa, como un editor de recursos, ciérrela. Si el programa no responde, es posible que tenga que usar el Administrador de tareas para finalizar el proceso. También es posible que tenga que cerrar y reiniciar Visual Studio.

Un examen antivirus bloquea la aplicación

Los programas antivirus a menudo bloquean temporalmente el acceso a los archivos recién creados, especialmente los archivos ejecutables .exe y .dll. Para corregir este problema, intente excluir los directorios de compilación del proyecto del programa antivirus.

No se puede abrir un archivo de biblioteca de Microsoft

Bibliotecas de Windows, como kernel32.lib

Si el archivo que no se puede abrir es uno de los archivos de biblioteca estándar proporcionados por Microsoft, como kernel32.lib, es posible que tenga un error de configuración del proyecto o un error de instalación. Compruebe que windows SDK está instalado. Si el proyecto requiere otras bibliotecas de Microsoft, como MFC, asegúrese de que el instalador de Visual Studio también instaló los componentes de MFC. Puede volver a ejecutar el instalador para agregar componentes opcionales en cualquier momento. Para obtener más información, vea Modificar Visual Studio. Use la pestaña Componentes individuales del instalador para elegir las bibliotecas y SDK específicos.

Bibliotecas vcruntime con versiones

Si el mensaje de error tiene una biblioteca de Microsoft con versiones como msvcr120.lib, es posible que el conjunto de herramientas de la plataforma para esa versión del compilador no esté instalado. Para corregir este problema, tiene dos opciones: Actualizar el proyecto para que use el conjunto de herramientas de la plataforma actual o instalar el conjunto de herramientas anterior y compilar el proyecto sin cambios. Para obtener más información, vea Actualización de proyectos de C++ desde versiones anteriores de Visual C++ y Usar la compatibilidad nativa con múltiples versiones en Visual Studio para compilar proyectos antiguos.

Bibliotecas comerciales, de depuración o específicas de la plataforma

El error puede producirse al compilar por primera vez para una nueva plataforma o configuración de destino, como Retail o ARM64. En el IDE, compruebe que están instalados el conjunto de herramientas de plataforma y la versión de Windows SDK especificados en la página de propiedades General. Compruebe también que las bibliotecas necesarias están disponibles en los directorios de biblioteca especificados en la página de propiedades Directorios de VC++. Compruebe las propiedades de cada configuración, como de depuración, comercial, x86 o ARM64. Si una compilación funciona pero otra no, compare la configuración de ambas. Instale las herramientas y bibliotecas necesarias que faltan.

La biblioteca vccorlib.lib

No hay bibliotecas mitigadas por Spectre para aplicaciones o componentes universales de Windows (UWP). Si el mensaje de error incluye vccorlib.lib, es posible que haya habilitado /Qspectre en un proyecto de UWP. Deshabilite la /Qspectre opción del compilador para corregir este problema. En Visual Studio, cambie la propiedad Mitigación de Spectre. Se encuentra en la página Generación de código de C/C++>del cuadro de diálogo Páginas de propiedades del proyecto.

Bibliotecas en proyectos en línea o de otros orígenes

Si compila un proyecto copiado desde otro equipo, es posible que las ubicaciones de instalación de la biblioteca sean diferentes. En el caso de las compilaciones de línea de comandos, compruebe que la variable de entorno LIB y las rutas de acceso de biblioteca están establecidas correctamente para la compilación. En Visual Studio, puede ver y editar las rutas de acceso de biblioteca actuales establecidas en las páginas de propiedades del proyecto. En la página Directorios de VC++, elija el control desplegable de la propiedad Directorios de biblioteca y, después, elija Editar. En la sección Valor evaluado del cuadro de diálogo Directorios de biblioteca se enumeran las rutas de acceso actuales que se buscan en los archivos de biblioteca. Actualice estas rutas de acceso para que apunten a las bibliotecas locales.

Bibliotecas actualizadas de Windows SDK

Este error puede producirse cuando la ruta de acceso de Visual Studio a Windows SDK no está actualizada. Puede ocurrir si instala un SDK de Windows más reciente independientemente del instalador de Visual Studio. Para corregirlo en el IDE, actualice las rutas de acceso especificadas en la página de propiedades Directorios de VC++. Establezca la versión en la ruta de acceso para que coincida con el nuevo SDK. Si usa el símbolo del sistema para desarrolladores, actualice el archivo por lotes que inicializa las variables de entorno con las nuevas rutas de acceso del SDK. Este problema se puede evitar usando el instalador de Visual Studio para que instale los SDK actualizados.

No se puede abrir un archivo de biblioteca de terceros

Hay varias causas comunes para este problema:

  • La ruta de acceso al archivo de biblioteca podría ser incorrecta o no encapsulada entre comillas dobles. O bien, es posible que no lo haya especificado en el enlazador.

  • Es posible que haya instalado una versión de 32 bits de la biblioteca, pero está compilando para 64 bits o de otro modo.

  • Es posible que la biblioteca tenga dependencias en otras bibliotecas que no están instaladas.

Para corregir un problema de ruta de acceso para las compilaciones de línea de comandos, compruebe que se ha establecido la variable de entorno LIB. Asegúrese de que incluye rutas de acceso para todas las bibliotecas que use y para cada configuración que compile. En el IDE, las rutas de acceso de biblioteca se establecen mediante la propiedad Directorios de VC++>Biblioteca de directorios . Asegúrese de que todos los directorios que contienen las bibliotecas que necesita se enumeran aquí, para cada configuración que cree.

Es posible que tenga que proporcionar un directorio de biblioteca que reemplace a un directorio de biblioteca estándar. En la línea de comandos, use la /LIBPATH opción . En el IDE, use la propiedad Directorios de biblioteca adicionales en la página de propiedades Propiedades de configuración> Vinculador > General del proyecto.

Asegúrese de instalar todas las versiones de la biblioteca que necesite para las configuraciones que compile. Considere la posibilidad de usar la utilidad de administración de paquetes vcpkg para automatizar la instalación y configuración de muchas bibliotecas comunes. Cuando pueda, es mejor crear sus propias copias de bibliotecas de terceros. Después, asegúrese de tener todas las dependencias locales de las bibliotecas compiladas para las mismas configuraciones que el proyecto.

No se puede abrir un archivo compilado por el proyecto

Es posible que vea este error si el nombre de archivo aún no existe cuando el enlazador intenta acceder a él. Puede ocurrir cuando un proyecto depende de otro en la solución, pero los proyectos se compilan en el orden incorrecto. Para corregir este problema, asegúrese de que las referencias del proyecto están establecidas en el proyecto que usa el archivo. Después, el archivo que falta se compila antes de que sea necesario. Para obtener más información, vea Adición de referencias en proyectos de Visual Studio C++ y Administrar referencias en un proyecto.

No se puede abrir el archivo "C:\Program.obj"

Si ve el nombre de archivo C:\Program.obj en el mensaje de error, escriba las rutas de acceso de la biblioteca entre comillas dobles. Este error se produce cuando se pasa al enlazador una ruta de acceso que no está escrita entre comillas y que comienza por C:\Archivos de programa. Las rutas de acceso desajustadas también pueden provocar errores similares. Normalmente, muestran un archivo .obj inesperado en la raíz de la unidad.

Para corregir este problema para las compilaciones de línea de comandos, compruebe los parámetros de la opción /LIBPATH. Compruebe también las rutas de acceso especificadas en la variable de entorno LIB y las rutas de acceso especificadas en la línea de comandos. Asegúrese de usar comillas dobles alrededor de las rutas de acceso que incluyan espacios.

Para corregir este problema en el IDE, agregue comillas dobles según sea necesario a las siguientes propiedades del proyecto:

  • La propiedad Directorios de biblioteca de la página de propiedades Propiedades de configuración> Directorios de VC++.

  • La propiedad Directorios de biblioteca adicionales de la página de propiedades Propiedades de configuración> Enlazador > General.

  • La propiedad Dependencias adicionales de la página de propiedades Propiedades de configuración> Enlazador > Entrada.

Otros problemas comunes

Problemas de ruta de acceso o de nombre de archivo

Este error puede producirse cuando el nombre de archivo o la ruta de acceso de la biblioteca especificados en el enlazador no son correctos. O bien, cuando la ruta de acceso tiene una especificación de unidad no válida. Busque problemas en la línea de comandos o en cualquier directiva #pragma comment( lib, "library_name" ). Compruebe la ortografía y la extensión de archivo y compruebe que el archivo existe en la ubicación especificada.

Sincronización de compilación en paralelo

Si usa una opción de compilación paralela, Es posible que Visual Studio haya bloqueado el archivo en otro subproceso. Para corregir este problema, compruebe que el mismo objeto de código o biblioteca no está integrado en varios proyectos. Use dependencias de compilación o referencias de proyecto para seleccionar archivos binarios compilados en el proyecto.

Dependencias adicionales especificadas en el IDE

Al especificar directamente bibliotecas individuales en la propiedad Dependencias adicionales, use espacios para separar los nombres de biblioteca. No use comas ni punto y coma. Si usa el elemento de menú Editar para abrir el cuadro de diálogo Dependencias adicionales, use líneas nuevas para separar los nombres, no comas, punto y coma ni espacios. Use también líneas nuevas al especificar rutas de acceso de biblioteca en los cuadros de diálogo Directorios de biblioteca y Directorios de biblioteca adicionales.

Rutas de acceso demasiado largas

Es posible que vea este error cuando la ruta de acceso del nombre de archivo se expande a más de 260 caracteres. Si es necesario, reorganice la estructura del directorio o acorte los nombres de carpeta y archivo para acortar las rutas de acceso.

Archivos demasiado grandes

Este error puede producirse porque el archivo es demasiado grande. Las bibliotecas o archivos de objetos de más de un gigabyte de tamaño pueden causar problemas para el enlazador de 32 bits. Una posible corrección de este problema es usar el conjunto de herramientas de 64 bits. Para obtener más información sobre cómo usar el conjunto de herramientas de 64 bits en la línea de comandos, vea Procedimiento para habilitar un conjunto de herramientas de Visual C++ de 64 bits en la línea de comandos. Para obtener información sobre cómo usar el conjunto de herramientas de 64 bits en el IDE, consulte Uso de MSBuild con las herramientas y el compilador de 64 bits. Consulte también esta entrada de Stack Overflow: Cómo hacer que Visual Studio use la cadena de herramientas nativa amd64.

Permisos de archivo incorrectos

Este error puede producirse si no tiene permisos de archivo suficientes para acceder a nombre de archivo. Puede ocurrir si usa una cuenta de usuario normal para acceder a los archivos de biblioteca en los directorios del sistema protegidos. o si usa archivos copiados de otros usuarios que todavía tienen establecidos sus permisos originales. Para corregir este problema, mueva el archivo a un directorio de proyecto que se pueda escribir. Si el archivo movido tiene permisos inaccesibles, ejecute el comando takeown.exe en una ventana de comandos de administrador para tomar posesión del archivo.

Espacio en disco insuficiente

El error puede producirse cuando no tiene suficiente espacio en disco. El enlazador usa archivos temporales en varios casos. Aunque tenga espacio en disco suficiente, un vínculo grande puede disminuir o fragmentar el espacio en disco. Considere la posibilidad de usar la opción /OPT (Optimizaciones); la eliminación transitiva de COMDAT lee todos los archivos de objeto varias veces.

Problemas en la variable de entorno TMP

Si el nombre de archivo se denomina LNKnnn, se trata de un nombre de archivo generado por el enlazador para un archivo temporal. Es posible que el directorio especificado en la variable de entorno TMP no exista. O bien, puede especificarse más de un directorio para la variable de entorno TMP. Solo se debe especificar una ruta de acceso de directorio en la variable de entorno de TMP.

Ayuda, mi problema no aparece aquí.

Cuando no se aplique ninguno de los problemas enumerados aquí, puede usar las herramientas para enviar comentarios de Visual Studio para obtener ayuda. En el IDE, vaya a la barra de menús y elija Ayuda> Enviar comentarios > Notificar un problema. O bien, envíe una sugerencia mediante Ayuda > Enviar comentarios > Enviar una sugerencia. También puede usar el sitio de preguntas y respuestas de Microsoft Learn y el sitio web de visual Studio C++ Developer Community . Use estos sitios para buscar respuestas a preguntas y pedir ayuda. Para obtener más información, vea Cómo notificar un problema con la documentación o el conjunto de herramientas de Visual C++.

Si ha descubierto una nueva manera de corregir este problema que debemos agregar a este artículo, háganoslo saber. Puede enviarnos comentarios mediante el botón siguiente para Esta página. Úselo para crear un nuevo problema en nuestro repositorio de GitHub de documentación de C++. Gracias.