Compartilhar via


Erro das ferramentas de vinculador LNK1104

não é possível abrir o arquivo 'filename'

Esse erro é relatado quando o vinculador não abre um arquivo, seja para leitura ou para gravação. As duas causas mais comuns do problema são:

  • seu programa já está em execução ou está carregado no depurador e

  • seus caminhos de biblioteca estão incorretos ou não estão entre aspas duplas.

Há várias outras causas possíveis para esse erro. Para eliminar algumas, primeiro verifique que tipo de arquivo é filename. Em seguida, use as seções a seguir para ajudar a identificar e corrigir o problema específico.

Não é possível abrir seu aplicativo ou seu arquivo .pdb

Seu aplicativo está em execução ou está carregado no depurador

Quando filename for o nome do executável ou um arquivo .pdb associado, confira se o aplicativo já está em execução. Em seguida, verifique se ele está carregado em um depurador. Para corrigir esse problema, interrompa o programa e descarregue-o do depurador antes de compilá-lo novamente. Se o aplicativo estiver aberto em outro programa, como um editor de recursos, feche-o. Se o seu programa não estiver respondendo, talvez seja necessário usar o Gerenciador de Tarefas para encerrar o processo. Talvez você também precise fechar e reiniciar o Visual Studio.

Seu aplicativo está bloqueado por uma verificação antivírus

Os programas antivírus geralmente bloqueiam temporariamente o acesso a arquivos recém-criados, especialmente arquivos executáveis .exe e .dll. Para corrigir esse problema, tente excluir os diretórios de build do projeto do verificador antivírus.

Não é possível abrir um arquivo de biblioteca da Microsoft

Bibliotecas do Windows, como kernel32.lib

Se o arquivo que não pode ser aberto for um dos arquivos de biblioteca padrão fornecidos pela Microsoft, como kernel32.lib, você poderá ter um erro de configuração de projeto ou um erro de instalação. Verifique se o SDK do Windows está instalado. Se o projeto exigir outras bibliotecas da Microsoft, como o MFC, verifique se os componentes do MFC também foram instalados pelo instalador do Visual Studio. Você pode executar o instalador novamente para adicionar componentes opcionais a qualquer momento. Para obter mais informações, confira Modificar o Visual Studio. Use a guia Componentes individuais no instalador para escolher bibliotecas e SDKs específicos.

Bibliotecas vcruntime com controle de versão

Se a mensagem de erro tiver uma biblioteca da Microsoft com controle de versão, como msvcr120.lib, o conjunto de ferramentas da plataforma para essa versão do compilador poderá não estar instalado. Para corrigir esse problema, você tem duas opções: atualizar o projeto para usar o conjunto de ferramentas da plataforma atual ou instalar o conjunto de ferramentas mais antigo e compilar o projeto inalterado. Para obter mais informações, confira Atualizando projetos a partir de versões anteriores do Visual C++ e Usar multiplataforma nativa no Visual Studio para compilar projetos antigos.

Bibliotecas de varejo, depuração ou específicas a uma plataforma

O erro pode ocorrer quando você cria pela primeira vez para uma nova plataforma ou configuração de destino, como Varejo ou ARM64. No IDE, verifique se o Conjunto de ferramentas de plataforma e a Versão do SDK do Windows especificadas na Página de propriedades gerais estão instalados. Verifique também se as bibliotecas necessárias estão disponíveis nos Diretórios de Biblioteca especificados na Página de Propriedade de Diretórios VC++. Verifique as propriedades de cada configuração, como Depuração, Varejo, x86 ou ARM64. Se um build funcionar, mas outro não, compare as configurações para ambos. Instale as ferramentas e bibliotecas necessárias ausentes.

A biblioteca vccorlib.lib

Não há bibliotecas atenuadas pelo Spectre para aplicativos ou componentes UWP (Universal do Windows). Se a mensagem de erro incluir vccorlib.lib, talvez você tenha habilitado /Qspectre em um projeto UWP. Desative a opção do /Qspectre compilador para corrigir esse problema. No Visual Studio, altere a propriedade Mitigação de Espectro. Ele está na página Geração de Código C/C++>da caixa de diálogo Páginas de Propriedades do projeto.

Bibliotecas em projetos online ou de outras fontes

Se você criar um projeto copiado de outro computador, os locais de instalação da biblioteca poderão ser diferentes. Para builds de linha de comando, verifique se a variável de ambiente LIB e os caminhos de biblioteca estão definidos corretamente para o build. No Visual Studio, você pode ver e editar os caminhos de biblioteca atuais definidos nas páginas de Propriedade do projeto. Na página Diretórios VC++, escolha o controle suspenso para a propriedade Diretórios de Biblioteca e escolha Editar. A seção Valor avaliado da caixa de diálogo Diretórios de Biblioteca lista os caminhos atuais pesquisados para arquivos de biblioteca. Atualize esses caminhos para apontar para suas bibliotecas locais.

Bibliotecas atualizadas do SDK do Windows

Esse erro pode ocorrer quando o caminho do Visual Studio para o SDK do Windows está desatualizado. Isso pode acontecer se você instalar um SDK do Windows mais recente independentemente do instalador do Visual Studio. Para corrigi-lo no IDE, atualize os caminhos especificados na Página de propriedades dos diretórios do VC++. Defina a versão no caminho para corresponder ao novo SDK. Se você usar o Prompt de Comando do Desenvolvedor, atualize o arquivo em lote que inicializa as variáveis de ambiente com os novos caminhos do SDK. Esse problema pode ser evitado usando o instalador do Visual Studio para instalar SDKs atualizados.

Não é possível abrir um arquivo de biblioteca de terceiros

Há várias causas comuns para esse problema:

  • O caminho para o arquivo da biblioteca pode estar incorreto ou não estar entre aspas duplas. Ou talvez você não o tenha especificado para o vinculador.

  • Você pode ter instalado uma versão de 32 bits da biblioteca, mas está criando para 64 bits ou vice-versa.

  • A biblioteca pode ter dependências de outras bibliotecas que não estão instaladas.

Para corrigir um problema de caminho para builds de linha de comando, verifique se a variável de ambiente LIB está definida. Certifique-se de que ele inclua caminhos para todas as bibliotecas que você usar e para cada configuração que você compilar. No IDE, os caminhos da biblioteca são definidos pela propriedadeDiretórios do VC++>Biblioteca de Diretórios. Verifique se todos os diretórios que contêm as bibliotecas de que você precisa estão listados aqui para cada configuração que você compilar.

Talvez seja necessário fornecer um diretório de biblioteca que substitua um diretório de biblioteca padrão. Na linha de comando, use a /LIBPATH opção. No IDE, use a propriedade Diretórios de Biblioteca Adicionais na página Propriedades de Configuração > Vinculador > Geral do seu projeto.

Instale todas as versões da biblioteca necessárias para as configurações que você compilar. Considere usar o utilitário de gerenciamento de pacotes vcpkg para automatizar a instalação e a instalação para muitas bibliotecas comuns. Quando possível, é melhor criar cópias próprias de bibliotecas de terceiros. Assim, você terá todas as dependências locais das bibliotecas, criadas para as mesmas configurações que o projeto.

Não é possível abrir um arquivo criado pelo seu projeto

Você poderá ver esse erro se o nome do arquivo ainda não existir quando o vinculador tentar acessá-lo. Isso pode acontecer quando um projeto depende de outro na solução, mas os projetos são compilados na ordem errada. Para corrigir esse problema, verifique se suas referências de projeto estão definidas no projeto que usa o arquivo. Assim, o arquivo ausente é criado antes de ser exigido. Para obter mais informações, confira Adicionando referências em projetos do Visual Studio C++ e Gerenciando referências em um projeto.

Não é possível abrir o arquivo 'C:\Program.obj'

Se você vir o nome do arquivo C:\Program.obj na mensagem de erro, coloque os caminhos de biblioteca entre aspas duplas. Esse erro ocorre quando um caminho sem aspas que começa com C:\Arquivos de Programas é passado para o vinculador. Caminhos desencapsulados também podem causar erros semelhantes. Normalmente, eles mostram um arquivo .obj inesperado na raiz da unidade.

Para corrigir esse problema para builds de linha de comando, verifique os parâmetros de opção /LIBPATH. Verifique também os caminhos especificados na variável de ambiente LIB e os caminhos especificados na linha de comando. Certifique-se de usar aspas duplas em torno dos caminhos que incluem espaços.

Para corrigir esse problema no IDE, adicione aspas duplas conforme necessário às seguintes propriedades do projeto:

  • A propriedade Diretórios de Biblioteca na página de Propriedades de Configuração > Diretórios do VC++,

  • A propriedade Diretórios de Biblioteca Adicionais na página de Propriedades de Configuração > Vinculador > Geral,

  • A propriedade Dependências Adicionais na página de Propriedades de Configuração > Vinculador > Entrada.

Outros problemas comuns

Problemas de caminho ou nome de arquivo

Esse erro pode ocorrer quando o caminho ou nome do arquivo especificado da biblioteca para o vinculador está incorreto. Pode ocorrer também quando o caminho tem uma especificação de unidade inválida. Examine a linha de comando e as diretivas #pragma comment( lib, "library_name" ) para ver se há problemas. Verifique a ortografia e a extensão do arquivo e verifique se o arquivo existe no local especificado.

Sincronização de build paralelo

Se você estiver usando uma opção de build paralelo, o Visual Studio poderá ter bloqueado o arquivo em outro thread. Para corrigir esse problema, verifique se o mesmo objeto de código ou biblioteca não está integrado em vários projetos. Use dependências de build ou referências de projeto para coletar binários internos em seu projeto.

Dependências adicionais especificadas no IDE

Quando você especificar bibliotecas individuais na propriedade Dependências Adicionais diretamente, use espaços para separar os nomes de biblioteca. Não use vírgulas nem ponto e vírgula. Se você usar o item de menu Editar para abrir a caixa de diálogo Dependências Adicionais, use novas linhas para separar os nomes, não vírgulas, ponto e vírgula nem espaços. Use também novas linhas ao especificar caminhos de biblioteca nas caixas de diálogo Diretórios de Biblioteca e Diretórios de Biblioteca Adicionais.

Caminhos demasiadamente longos

Você pode ver esse erro quando o caminho do nome do arquivo se expandir para mais de 260 caracteres. Se necessário, reorganize sua estrutura de diretórios ou encurte seus nomes de pasta e arquivo para encurtar os caminhos.

Arquivos demasiadamente grandes

Esse erro pode ocorrer porque o arquivo é grande demais. Bibliotecas ou arquivos de objeto com mais de um gigabyte de tamanho podem causar problemas para o vinculador de 32 bits. Uma possível correção para esse problema é usar o conjunto de ferramentas de 64 bits. Para obter mais informações sobre como usar o conjunto de ferramentas de 64 bits na linha de comando, confira Como habilitar um conjunto de ferramentas do Visual C++ de 64 bits na linha de comando. Para obter informações sobre como usar o conjunto de ferramentas de 64 bits no IDE, confira Como usar o MSBuild com as ferramentas e o compilador de 64 bits. Confira também esta postagem do Stack Overflow: Como fazer o Visual Studio usar a cadeia de ferramentas amd64 nativa.

Permissões de arquivo incorretas

Esse erro poderá ocorrer se você tiver permissões de arquivo insuficientes para acessar filename. Isso pode acontecer se você usar uma conta de usuário comum para acessar arquivos de biblioteca em diretórios protegidos do sistema. Poderá ocorrer também se você usar arquivos copiados de outros usuários que ainda tenham as permissões originais definidas. Para corrigir esse problema, mova o arquivo para um diretório de projeto gravável. Se o arquivo movido tiver permissões inacessíveis, execute o comando takeown.exe em uma janela de comando com privilégios de Administrador para assumir a propriedade do arquivo.

Espaço em disco insuficiente

O erro poderá ocorrer quando você não tiver espaço em disco suficiente. O vinculador usa arquivos temporários em vários casos. Mesmo que você tenha espaço em disco suficiente, um link grande pode esgotar ou fragmentar o espaço em disco disponível. Considere usar a opção /OPT (Otimizações); a eliminação transitiva do COMDAT lê todos os arquivos de objeto várias vezes.

Problemas na variável de ambiente TMP

Se o filename for chamado LNKnnn, esse será um nome de arquivo gerado pelo vinculador para um arquivo temporário. O diretório especificado na variável de ambiente TMP pode não existir. Ou mais de um diretório pode ser especificado para a variável de ambiente TMP. Apenas um caminho de diretório deve ser especificado para a variável de ambiente TMP.

Preciso de ajuda, meu problema não está listado aqui.

Quando nenhum dos problemas listados aqui se aplicar, você poderá usar as ferramentas de comentários no Visual Studio para obter ajuda. No IDE, vá para a barra de menus e escolha Ajuda > Enviar Comentários > Relatar um Problema. Ou envie uma sugestão usando Ajuda > Enviar Comentários > Enviar uma Sugestão. Você também pode usar o site de perguntas e respostas do Microsoft Learn para perguntas e o site da Comunidade de Desenvolvedores do Visual Studio C++. Use esses sites para procurar respostas para perguntas e pedir ajuda. Para obter mais informações, confira Como relatar um problema com o conjunto de ferramentas ou a documentação do Visual C++.

Se você descobriu uma nova maneira de corrigir esse problema que devemos adicionar a este artigo, informe-nos. Você pode nos enviar comentários usando o botão abaixo para Esta página. Use-o para criar um problema em nosso repositório GitHub de documentação do C++. Obrigado!