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:
-
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.
-
Header und Implementierungsdateien erstellen:
- Funktionen in Headerdateien definieren (z. B. Funktionen. h) und implementieren Sie sie in Quelldateien (z. B. Functions.c).
-
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>
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>
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!
Stellungnahme: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