"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver erros do vinculador LNK2001 em projetos mistos C e C++ no VS2010?

Como resolver erros do vinculador LNK2001 em projetos mistos C e C++ no VS2010?

Publicado em 2024-12-21
Navegar:445

How to Resolve LNK2001 Linker Errors in Mixed C and C   Projects in VS2010?

Resolvendo erros de vinculador em projetos C e C mistos no VS2010

Descrição do problema

A integração do código C em um projeto C em diferentes projetos do VS2010 resultou em um erro de link ao chamar uma função C do código C. O erro, identificado como LNK2001, pertence a um símbolo externo não resolvido.

Solução

Para corrigir esse problema, garanta a organização adequada da base de código seguindo diretrizes específicas:

  1. Modularize Code:

    • Cada módulo C deve compreender um cabeçalho arquivo e um arquivo de origem.
    • Mantenha a consistência nas convenções de nomenclatura para arquivos e macros.
  2. Criar cabeçalhos e arquivos de implementação:

    • Defina funções em arquivos de cabeçalho (por exemplo, funções.h) e implemente-as em arquivos de origem (por exemplo, funções.c).
  3. Gerenciar exportações e importações:

    • Utilize a macro FUNCTIONS_EXPORT_API para marcar funções para exportação ( ou importação) no arquivo de cabeçalho.
    • Ao incluir o cabeçalho no projeto que usa as funções, não defina FUNCTIONS_EXPORT_API (ou defina a macro com seu valor de importação).
    • Certifique-se de que o projeto que exporta as funções tenha a macro FUNCTIONS_EXPORT definida (automática ou manualmente) antes de incluir o cabeçalho.

Exemplo Código

functions.h

#pragma once

#define FUNCTIONS_EXPORT_API

#if defined(__cplusplus)
extern "C" {
#endif

FUNCTIONS_EXPORT_API char *dtoa(double, int, int, int*, int*, char**);
FUNCTIONS_EXPORT_API char *g_fmt(char*, double);
FUNCTIONS_EXPORT_API void freedtoa(char*);

#if defined(__cplusplus)
}
#endif

functions.c

#define FUNCTIONS_EXPORTS
#include "functions.h"

char *dtoa(double, int, int, int*, int*, char**)
{
    // Function implementation
}

char *g_fmt(char*, double)
{
    // Function implementation
}

void freedtoa(char*)
{
    // Function implementation
}

Considerações adicionais

  • Evite usar o especificador de armazenamento externo em declarações de função dentro do cabeçalho.
  • Utilize a macro específica do projeto (por exemplo, EXPORTFUNCTIONSPROJECT_EXPORTS) para automatizar exportações.
  • Verifique os nomes das macros nas propriedades do projeto em Pré-processador Definições.

Problemas relacionados

  • [Erro LNK2005 no formulário CLR do Windows](https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA, não é possível encontrar o ponto de entrada da DLL em uma DLL file](https://stackoverflow.com/a/7214325/1128974)
  • [Ao usar fstream em uma biblioteca, recebo erros de vinculador no executável](https://stackoverflow.com/a/10068252 /1128974)
  • [Exportação C dll indefinido](https://stackoverflow.com/a/7709927/1128974)
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3