„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie behebe ich LNK2001-Linker-Fehler in gemischten C- und C++-Projekten in VS2010?

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

Veröffentlicht am 21.12.2024
Durchsuche:343

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. Modularisieren Code:

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

    • Definieren Sie Funktionen in Header-Dateien (z. B. Functions.h) und implementieren Sie sie in Quelldateien (z. B. Functions.c).
  3. Exporte und Importe verwalten:

    • Verwenden Sie die FUNCTIONS_EXPORT_API-Makro zum Markieren von Funktionen für den Export (oder Import) in der Header-Datei.
    • 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 das einbinden header.

Beispielcode

functions.h

#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

functions.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
}

Zusätzliche Überlegungen

  • Vermeiden Sie die Verwendung des externen Speicherspezifizierers in Funktionsdeklarationen im Header.
  • Verwenden Sie das projektspezifische Makro (z. B. EXPORTFUNCTIONSPROJECT_EXPORTS) zur Automatisierung exportiert.
  • Überprüfen Sie die Makronamen in den Projekteigenschaften unten Präprozessordefinitionen.

Verwandte Probleme

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

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3