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 :
-
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.
-
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).
-
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