Maison  >  Article  >  développement back-end  >  Comment résoudre les erreurs de l'éditeur de liens lors de l'appel de fonctions C à partir d'un projet C distinct dans Visual Studio 2010 ?

Comment résoudre les erreurs de l'éditeur de liens lors de l'appel de fonctions C à partir d'un projet C distinct dans Visual Studio 2010 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 09:51:02835parcourir

How to Resolve Linker Errors When Calling C Functions from a Separate C   Project in Visual Studio 2010?

Erreur de liaison lors de l'appel d'une fonction C à partir du code C dans un projet VS2010 séparé

Comprendre le problème :

Un développeur a rencontré une erreur de l'éditeur de liens lors de la tentative d'appel d'une fonction C à partir d'un projet C dans une autre solution Visual Studio 2010. Malgré l'utilisation de mots-clés externes et l'inclusion d'un en-tête, le projet n'a pas réussi à établir un lien vers la bibliothèque C, ce qui a entraîné une erreur de « symbole externe non résolu ».

Correction de la structure :

Pour résoudre le problème, la structure du projet pour les fonctions C doit être réorganisée et renommée. Au lieu d'inclure les définitions de fonctions C dans l'en-tête, l'en-tête doit simplement déclarer les fonctions externes avec les conventions d'appel correctes. L'implémentation de ces fonctions doit être déplacée vers un fichier source C distinct.

Exportation des fonctions :

L'exportation des fonctions C se fait en définissant une macro dans la source C déposer. Lorsque le projet est compilé, cette macro définit les fonctions telles qu'exportées. Dans le projet C, l'en-tête doit être inclus en premier pour définir les fonctions externes, suivi des macros appropriées pour marquer les fonctions comme importées.

Structure de fichier suggérée :

  • functions.h - Fichier d'en-tête avec déclarations externes des fonctions C
  • functions.c - Fichier d'implémentation avec définitions de fonctions et macros d'exportation nécessaires

Exemples de fichiers :

functions.h

<code class="c">#pragma once

#if defined(_WIN32)
    #if defined(FUNCTIONS_STATIC)
        #define FUNCTIONS_EXPORT_API
    #else
        #if defined(FUNCTIONS_EXPORTS)
            #define FUNCTIONS_EXPORT_API __declspec(dllexport)
        #else
            #define FUNCTIONS_EXPORT_API __declspec(dllimport)
        #endif
    #endif
#else
    #define FUNCTIONS_EXPORT_API
#endif

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

char *g_fmt(char*, double)
{
    //function statements
}

void freedtoa(char*)
{
    //function statements
}</code>

En implémentant ces modifications, l'erreur de l'éditeur de liens devrait être résolue et le projet C pourra se lier avec succès et appeler les fonctions C définies dans le projet séparé.

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