Partilhar via


Erro de ferramentas de vinculação LNK1104

Não é possível abrir o arquivo 'nome do arquivo'

Observações

Este erro é relatado quando o vinculador não consegue abrir 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

  • Os caminhos das bibliotecas estão incorretos ou não estão delimitados por aspas duplas.

Existem muitas outras causas possíveis para este erro. Para restringi-los, primeiro verifique que tipo de nome de arquivo é. 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 é carregado no depurador

Quando filename for o nome do executável ou um arquivo .pdb associado, veja se o aplicativo já está em execução. Depois, verifique se está carregado num depurador. Para corrigir este problema, pare o programa e remova-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 programa não estiver respondendo, talvez seja necessário usar o Gerenciador de Tarefas para finalizar o processo. Também pode ser necessário 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 .exe e .dll arquivos executáveis. Para corrigir esse problema, tente excluir os diretórios de compilação do projeto do scanner 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ê pode ter um erro de configuração do projeto ou um erro de instalação. Verifique se o SDK do Windows está instalado. Se o seu projeto requer outras bibliotecas da Microsoft, como MFC, certifique-se de que os componentes 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, consulte Modificar o Visual Studio. Use a guia Componentes individuais no instalador para escolher bibliotecas e SDKs específicos.

Bibliotecas vcruntime versionadas

Se a mensagem de erro tiver uma biblioteca da Microsoft versionada, como msvcr120.lib, o conjunto de ferramentas da plataforma para essa versão do compilador pode 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, consulte Atualização de projetos de versões anteriores do Visual C++ e Usar o multi-direcionamento nativo no Visual Studio para compilar projetos antigos.

Bibliotecas de varejo, depuração ou específicas da 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 da plataforma e a versão do SDK do Windows especificada na página de propriedades Geral 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 Propriedades de Diretórios VC++. Verifique as propriedades de cada configuração, como Depuração, Release, x86 ou ARM64. Se uma compilação funcionar, mas outra não, compare as configurações de ambas. Instale as ferramentas e bibliotecas necessárias que estão em falta.

A biblioteca vccorlib.lib

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

Bibliotecas em projetos provenientes de fontes online ou outras

Se você criar um projeto copiado de outro computador, os locais de instalação da biblioteca podem ser diferentes. Para compilações de linha de comando, verifique se a variável de ambiente LIB e os caminhos da biblioteca estão definidos corretamente para a compilação. No Visual Studio, você pode ver e editar os caminhos de biblioteca atuais definidos nas páginas de propriedades do seu projeto. Na página Diretórios VC++, escolha o menu 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 por arquivos de biblioteca. Atualize esses caminhos para apontar para suas bibliotecas locais.

Bibliotecas atualizadas do SDK do Windows

Este 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 Diretórios 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 lotes 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 de biblioteca pode estar incorreto ou não estar entre aspas duplas. Ou, você pode não tê-lo especificado para o vinculador.

  • É possível que tenha instalado uma versão de 32 bits da biblioteca, mas esteja a compilar 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 compilações de linha de comando, verifique se a variável de ambiente LIB está definida. Certifique-se de que inclui caminhos para todas as bibliotecas que você usa e para cada configuração que você cria. No IDE, os caminhos da biblioteca são definidos pela propriedade VC++ Directories>Library Directories . Certifique-se de que todos os diretórios que contêm as bibliotecas necessárias estão listados aqui, para cada configuração que você criar.

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. Na IDE, utilize a propriedade Diretórios Adicionais de Bibliotecas no separador Configuration Properties > Linker > General do seu projeto.

Certifique-se de instalar todas as versões da biblioteca necessárias para as configurações que você cria. Considere usar o utilitário de gerenciamento de pacotes vcpkg para automatizar a instalação e a configuração de muitas bibliotecas comuns. Quando puder, é melhor criar suas próprias cópias de bibliotecas de terceiros. Então você tem certeza de ter todas as dependências locais das bibliotecas, criadas para as mesmas configurações do seu projeto.

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

Você pode 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 construídos na ordem errada. Para corrigir esse problema, certifique-se de que suas referências de projeto estão definidas no projeto que usa o arquivo. Em seguida, o arquivo ausente é construído antes de ser necessário. Para obter mais informações, consulte Adicionando referências em projetos do Visual Studio C++ e Gerenciando referências em um projeto.

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

Se você vir o nome do arquivo C:\Program.obj na mensagem de erro, envolva os caminhos da biblioteca entre aspas duplas. Este erro acontece quando um caminho desempacotado que começa com C:\Program Files é passado para o vinculador. Caminhos desempacotados também podem causar erros semelhantes. Normalmente, um arquivo inesperado de .obj aparece na raiz do seu disco.

Para corrigir esse problema para compilações de linha de comando, verifique os parâmetros da 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 de quaisquer caminhos que incluam espaços.

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

  • A propriedade Library Directories na página de propriedades Configuration Properties > VC++ Directories

  • A propriedade Additional Library Directories na página de propriedades Configuration Properties > Linker > General

  • Propriedade Additional Dependencies na página de propriedades Configuration Properties > Linker > Input.

Outros problemas comuns

Problemas de caminho ou nome de arquivo

Este erro pode ocorrer quando o nome do arquivo da biblioteca ou caminho especificado para o vinculador está incorreto. Ou quando o caminho contém uma especificação de unidade inválida. Verifique na linha de comando ou em qualquer diretiva #pragma comment( lib, "library_name") para identificar problemas. Verifique a ortografia e a extensão do arquivo e verifique se o arquivo existe no local especificado.

Sincronização de compilação paralela

Se você estiver usando uma opção de compilação paralela, o Visual Studio pode ter bloqueado o arquivo em outro thread. Para corrigir esse problema, verifique se o mesmo objeto de código ou biblioteca não está criado em vários projetos. Use dependências de compilação ou referências de projeto para obter binários construídos no projeto.

Dependências adicionais especificadas no IDE

Ao especificar bibliotecas individuais diretamente na propriedade Dependências Adicionais , use espaços para separar os nomes das bibliotecas. Não use vírgulas ou 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 ou espaços. Use também novas linhas ao especificar caminhos de biblioteca nas caixas de diálogo Diretórios de bibliotecas e Diretórios de bibliotecas adicionais .

Caminhos demasiado longos

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

Ficheiros demasiado grandes

Este erro pode ocorrer porque o ficheiro é demasiado grande. 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, consulte 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, consulte Usando o MSBuild com o compilador e as ferramentas de 64 bits. Veja também esta publicação no Stack Overflow: Como fazer o Visual Studio usar a cadeia de ferramentas amd64 nativa.

Permissões de arquivo incorretas

Este erro pode ocorrer se você tiver permissões de arquivo insuficientes para acessar o nome do arquivo. Isso pode acontecer se você usar uma conta de usuário comum para acessar arquivos de biblioteca em diretórios protegidos do sistema. Ou, se você usar arquivos copiados de outros usuários que ainda têm suas 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 do administrador para assumir a propriedade do arquivo.

Espaço em disco insuficiente

O erro pode ocorrer quando você não tem 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 de COMDAT obriga a leitura de todos os ficheiros de objeto várias vezes.

Problemas na variável de ambiente TMP

Se o nome do arquivo for chamado LNKnnn, é um nome de arquivo gerado pelo vinculador de 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.

Ajuda, meu problema não está listado aqui!

Quando nenhum dos problemas listados aqui se aplicar, você pode usar as ferramentas de comentários no Visual Studio para obter ajuda. No IDE, vá para a barra de menus e escolha Ajuda > Enviar feedback > Relatar um problema. Ou envie uma sugestão usando Ajuda > Enviar comentários > Envie 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++. Utilize estes sites para procurar respostas a perguntas e pedir ajuda. Para obter mais informações, consulte Como relatar um problema com o conjunto de ferramentas ou 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 novo tópico no nosso repositório GitHub de documentação C++. Obrigado;!