Maison  >  Article  >  développement back-end  >  Comment résoudre les erreurs de l'éditeur de liens LNK2001 dans les projets mixtes C et C dans VS2010 ?

Comment résoudre les erreurs de l'éditeur de liens LNK2001 dans les projets mixtes C et C dans VS2010 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 09:34:02823parcourir

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

Résolution des erreurs de liaison dans les projets mixtes C et C dans VS2010

Description du problème

L'intégration du code C dans un projet C dans différents projets VS2010 a abouti dans une erreur de lien lors de l'appel d'une fonction C à partir du code C. L'erreur, identifiée comme LNK2001, concerne un symbole externe non résolu.

Solution

Pour remédier à ce problème, assurez-vous de la bonne organisation de la base de code en respectant des directives spécifiques :

  1. Modulariser le code :

    • Chaque module C doit comprendre un fichier d'en-tête et un fichier source.
    • Maintenir la cohérence dans les conventions de dénomination pour les deux fichiers et macros.
  2. Créer des en-têtes et des fichiers d'implémentation :

    • Définir des fonctions dans les fichiers d'en-tête (par exemple, des fonctions. h) et implémentez-les dans les fichiers sources (par exemple,functions.c).
  3. Gérer les exportations et les importations :

    • Utilisez la macro FUNCTIONS_EXPORT_API pour marquer les fonctions à exporter (ou importer) dans le fichier d'en-tête.
    • Lors de l'inclusion de l'en-tête dans le projet qui utilise les fonctions, ne définissez pas FUNCTIONS_EXPORT_API (ou définissez la macro avec sa valeur d'importation ).
    • Assurez-vous que le projet exportant les fonctions a la macro FUNCTIONS_EXPORT définie (automatiquement ou manuellement) avant d'inclure l'en-tête.

Exemple de code

functions.h

<code class="c">#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</code>

functions.c

<code class="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
}</code>

Considérations supplémentaires

  • Évitez d'utiliser le spécificateur de stockage externe dans les déclarations de fonction dans l'en-tête.
  • Utilisez la macro spécifique au projet (par exemple, EXPORTFUNCTIONSPROJECT_EXPORTS) pour automatiser les exportations.
  • Vérifiez les noms de macro dans les propriétés du projet sous Préprocesseur. Définitions.

Problèmes connexes

  • [Erreur LNK2005 dans le formulaire Windows CLR](https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA, impossible de trouver le point d'entrée DLL à partir d'un fichier DLL](https://stackoverflow.com/a/7214325/1128974)
  • [Lors de l'utilisation de fstream dans une bibliothèque, j'obtiens des erreurs d'éditeur de liens dans l'exécutable](https://stackoverflow.com/a/10068252/1128974)
  • [Exportation de dll C non définie](https://stackoverflow.com/a/7709927/1128974)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn