Maison > développement back-end > C++ > 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
Libérer: 2024-11-01 09:51:02
original
1009 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal