PROBLEMA: Vínculo Error LNK2001: _main símbolo externos não resolvida

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 291952
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Quando você criar um projeto de um desses tipos de
  • Projeto de aplicativo do console Win32
  • Projeto Template Library (ATL) DLL/EXE ativo com a configuração de lançamento
  • Um projeto com principal como ponto de entrada personalizado
Você pode receber a seguinte mensagem de erro do vinculador:
Erro LIBCD.lib(crt0.obj): LNK2001: unresolved _main símbolo externo
Causa
Um aplicativo de console Win32 requer a função principal como o ponto de entrada. Vinculador retorna essa mensagem de erro quando ele não é possível localizar a função principal em qualquer um dos arquivos anexados ao projeto.

Se seu projeto for um projeto ATL, as configurações de lançamento de projetos ATL definem _ATL_MIN_CRT, que exclui o código de inicialização do CRT (C runtime) do arquivo .exe ou .dll. Vinculador oferece essa mensagem de erro quando você tem _ATL_MIN_CRT definido e você estiver usando as funções de CRT que precisam de código de inicialização do CRT.

Se o projeto não é um dos tipos listados na seção "Sintomas" deste artigo, mas você ainda estiver recebendo o erro, talvez você tenha principal selecionado como uma entrada de ponto de símbolo para o projeto em configurações do vinculador mas não forneceu uma função principal nos arquivos adicionados para o projeto.
Resolução
  • Se você tiver criado um aplicativo de console Win32 em vez de um aplicativo Win32 por engano, há duas maneiras para corrigir esse problema:
    • A partir do menu Project , escolha configurações , clique na guia C/C ++ e alterar definições de pré-processador de Win32, _DEBUG, _CONSOLE e _MBCS para Win32, _DEBUG e _WINDOWS. Em seguida, clique na guia conexão e em Opções de projeto , alterar / subsistema: console para / subsistema: windows . - ou -

    • Criar um novo projeto e selecione Aplicativo Win32 em vez do Aplicativo de console do Win32 . Adicione os arquivos para esse projeto.
  • Se você tiver criado um aplicativo de console do Win32 e se esqueceu de fornecer uma função main , escreva uma função principal em um dos arquivos de origem adicionados para o projeto.
  • Se você tiver selecionado principal como o ponto de entrada personalizado por engano, no menu Project , escolha configurações e clique no vinculador guia Selecionar saída como a categoria e remover principal da caixa de texto do símbolo de ponto de entrada .
  • Se seu projeto for um projeto ATL, há duas maneiras para corrigir o problema:
    • Remover _ATL_MIN_CRT da lista de definições pré-processamento para permitir CRT de código de inicialização para ser incluído: no menu Build , escolha configurações . Mantenha pressionada a tecla CTRL enquanto seleciona todas as configurações de lançamento. Em C/C ++ guia, escolha a categoria Geral e, em seguida, remover _ATL_MIN_CRT da caixa de edição de definições de pré-processador . - ou -

    • Se possível, remova chamadas para funções de CRT que exigem o código de inicialização do CRT e usar seus equivalentes do Win32. Por exemplo, use lstrcmp em vez de strcmp . Funções conhecidas que requerem código de inicialização do CRT incluem a seqüência de caracteres e funções de ponto flutuante.
Situação
Esse comportamento é por design.
Mais Informações
Estes são os pontos de entrada para os vários tipos de projetos:
  • principal: o projeto de console
  • WinMain: Projeto de Win32
  • Win32 de DllMain: Projeto DLL (se você vincular com as bibliotecas CRT, você não precisa especificar um, pois ele adiciona um padrão DllMain)
O erro LNK2001 Especifica o símbolo que causa o erro. Isso significa que o vinculador não pôde localizar o símbolo no seu projeto e as bibliotecas que usa seu projeto. Verifique se o símbolo está presente em um arquivo de origem no seu projeto. Caso contrário, vinculá-lo a biblioteca estática apropriada, biblioteca de importação ou arquivo .obj.

Gerado pelo AppWizard ATL projetos têm esta _ATL_MIN_CRT definido para configurações de lançamento. ATL é destinado a minimizar o tamanho da imagem e a confiança em arquivos .dll do tempo de execução. Ele fornece implementações alternativas para APIs CRT comuns que exigiria caso contrário, o código de inicialização CRT. O uso dessas APIs é controlado pela macro _ATL_MIN_CRT. Se você estiver usando _ATL_MIN_CRT, isso não significa que você não pode usar as rotinas de CRT. No entanto, se você usar as rotinas que exigem o código de inicialização CRT, em seguida, você obterá um erro de vinculador que _main é não resolvidos. Fornecer sua própria implementação de _main não resolve esse problema.
Referências
Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
138400Solução de problemas LNK2001 ou L2029 não resolvidos erro externo
125750PROBLEMA: Erro LNK2001: '_WinMain@16': unresolved external symbol
131204PROBLEMA: Project errado seleção causa LNK2001 em _WinMain@16
166480INFO: Active Template Library (ATL) perguntas freqüentes

LNK2001

Propriedades

ID do Artigo: 291952 - Última Revisão: 12/06/2015 01:19:24 - Revisão: 3.1

Microsoft Visual Studio 6.0 Enterprise Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbnosurvey kbarchive kbmt kbprb KB291952 KbMtpt
Comentários