"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo resolver errores del vinculador LNK2001 en proyectos mixtos de C y C++ en VS2010?

¿Cómo resolver errores del vinculador LNK2001 en proyectos mixtos de C y C++ en VS2010?

Publicado el 2024-12-21
Navegar:169

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

Resolución de errores del vinculador en proyectos mixtos de C y C en VS2010

Descripción del problema

La integración de código C en un proyecto C en diferentes proyectos VS2010 ha resultado en un error de enlace al llamar a una función C desde código C. El error, identificado como LNK2001, pertenece a un símbolo externo no resuelto.

Solución

Para rectificar este problema, asegúrese de organizar adecuadamente el código base siguiendo pautas específicas:

  1. Código de modularización:

    • Cada módulo C debe comprender un archivo de encabezado y un archivo fuente.
    • Mantenga la coherencia en las convenciones de nomenclatura tanto para archivos como para macros.
  2. Cree encabezados y archivos de implementación:

    • Defina funciones en archivos de encabezado (p. ej., funciones.h) e impleméntelas en archivos fuente (p. ej., funciones.c).
  3. Administrar exportaciones e importaciones:

    • Utilice la macro FUNCTIONS_EXPORT_API para marcar funciones para exportación ( o importar) en el archivo de encabezado.
    • Al incluir el encabezado en el proyecto que usa las funciones, no defina FUNCTIONS_EXPORT_API (o defina la macro con su valor de importación).
    • Asegúrese de que el proyecto que exporta las funciones tenga la macro FUNCTIONS_EXPORT definida (automática o manualmente) antes de incluir el encabezado.

Código de ejemplo

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

funciones.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
}

Consideraciones adicionales

  • Evite usar el especificador de almacenamiento externo en declaraciones de función dentro del encabezado.
  • Utilice la macro específica del proyecto (por ejemplo, EXPORTFUNCTIONSPROJECT_EXPORTS) para automatizar exportaciones.
  • Verifique los nombres de las macros en las propiedades del proyecto en Preprocesador Definiciones.

Problemas relacionados

  • [Error LNK2005 en CLR Windows Form](https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA, no puedo encontrar el punto de entrada de una DLL desde una DLL file](https://stackoverflow.com/a/7214325/1128974)
  • [Cuando uso fstream en una biblioteca, obtengo errores del vinculador en el ejecutable](https://stackoverflow.com/a/10068252 /1128974)
  • [Exportación C dll indefinido](https://stackoverflow.com/a/7709927/1128974)
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3