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

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

char *g_fmt(char*, double)
{
    // Function implementation
}

void freedtoa(char*)
{
    // Function implementation
}</code>
Copier après la connexion

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