"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-12-21
Parcourir:292

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 corriger ce problème, assurez-vous d'une bonne organisation de la base de code en respectant les 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 des fichiers et des 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,functions.h) et les implémenter dans les fichiers source (par exemple, function.c).
  3. Gérer les exportations et les importations :

    • Utilisez la macro FUNCTIONS_EXPORT_API pour marquer les fonctions à exporter ( ou importation) dans le fichier d'en-tête.
    • Lorsque vous incluez l'en-tête dans le projet qui utilise les fonctions, ne définissez pas FUNCTIONS_EXPORT_API (ou définir 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

#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
}

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 exports.
  • 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 de la DLL à partir d'une DLL file](https://stackoverflow.com/a/7214325/1128974)
  • [Lorsque j'utilise 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éfini](https://stackoverflow.com/a/7709927/1128974)
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3