Heim > Backend-Entwicklung > C++ > Hauptteil

Wie behebe ich LNK2001-Linker-Fehler in gemischten C- und C-Projekten in VS2010?

Linda Hamilton
Freigeben: 2024-11-01 09:34:02
Original
822 Leute haben es durchsucht

How to Resolve LNK2001 Linker Errors in Mixed C and C   Projects in VS2010?

Beheben von Linkerfehlern in gemischten C- und C-Projekten in VS2010

Problembeschreibung

Die Integration von C-Code in ein C-Projekt in verschiedenen VS2010-Projekten hat zur Folge in einem Linkfehler beim Aufruf einer C-Funktion aus C-Code. Der als LNK2001 identifizierte Fehler bezieht sich auf ein ungelöstes externes Symbol.

Lösung

Um dieses Problem zu beheben, stellen Sie sicher, dass die Codebasis ordnungsgemäß organisiert ist, indem Sie bestimmte Richtlinien einhalten:

  1. Code modularisieren:

    • Jedes C-Modul sollte eine Header-Datei und eine Quelldatei umfassen.
    • Behalten Sie die Konsistenz der Namenskonventionen für beide bei Dateien und Makros.
  2. Header und Implementierungsdateien erstellen:

    • Funktionen in Headerdateien definieren (z. B. Funktionen. h) und implementieren Sie sie in Quelldateien (z. B. Functions.c).
  3. Exporte und Importe verwalten:

    • Verwenden Sie das Makro FUNCTIONS_EXPORT_API, um Funktionen für den Export (oder Import) in der Header-Datei zu markieren.
    • Wenn Sie den Header in das Projekt einschließen, das die Funktionen verwendet, definieren Sie nicht FUNCTIONS_EXPORT_API (oder definieren Sie das Makro mit seinem Importwert). ).
    • Stellen Sie sicher, dass für das Projekt, das die Funktionen exportiert, das Makro FUNCTIONS_EXPORT definiert ist (automatisch oder manuell), bevor Sie den Header einfügen.

Beispielcode

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Zusätzliche Überlegungen

  • Vermeiden Sie die Verwendung des externen Speicherspezifizierers in Funktionsdeklarationen im Header.
  • Verwenden Sie das projektspezifische Makro (z. B. EXPORTFUNCTIONSPROJECT_EXPORTS), um Exporte zu automatisieren.
  • Überprüfen Sie die Makronamen in den Projekteigenschaften unter „Präprozessor“. Definitionen.

Verwandte Probleme

  • [LNK2005-Fehler in CLR Windows Form](https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA, DLL-Einstiegspunkt aus einer DLL-Datei kann nicht gefunden werden](https://stackoverflow.com/a/7214325/1128974)
  • [Bei der Verwendung von fstream in einer Bibliothek erhalte ich Linkerfehler die ausführbare Datei](https://stackoverflow.com/a/10068252/1128974)
  • [C-DLL-Export undefiniert](https://stackoverflow.com/a/7709927/1128974)

Das obige ist der detaillierte Inhalt vonWie behebe ich LNK2001-Linker-Fehler in gemischten C- und C-Projekten in VS2010?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!