Heim > Artikel > Backend-Entwicklung > Wie behebe ich Linker-Fehler beim Aufrufen von C-Funktionen aus einem separaten C-Projekt in Visual Studio 2010?
Verstehen des Problems:
Ein Entwickler Beim Versuch, eine C-Funktion aus einem C-Projekt in einer anderen Visual Studio 2010-Lösung aufzurufen, ist ein Linkerfehler aufgetreten. Trotz der Verwendung externer Schlüsselwörter und der Einbindung eines Headers konnte das Projekt keine Verbindung zur C-Bibliothek herstellen, was zu einem Fehler „ungelöstes externes Symbol“ führte.
Korrektur der Struktur:
Um das Problem zu beheben, muss die Projektstruktur für die C-Funktionen neu organisiert und umbenannt werden. Anstatt die C-Funktionsdefinitionen in den Header aufzunehmen, sollte der Header einfach externe Funktionen mit den richtigen Aufrufkonventionen deklarieren. Die Implementierung dieser Funktionen sollte in eine separate C-Quelldatei verschoben werden.
Funktionen exportieren:
Das Exportieren der C-Funktionen erfolgt durch die Definition eines Makros in der C-Quelle Datei. Beim Kompilieren des Projekts definiert dieses Makro die Funktionen als exportiert. Im C-Projekt sollte zuerst der Header eingefügt werden, um die externen Funktionen zu definieren, gefolgt von entsprechenden Makros, um die Funktionen als importiert zu markieren.
Empfohlene Dateistruktur:
Beispieldateien:
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>
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>
Durch die Implementierung dieser Änderungen sollte der Linkerfehler behoben werden und das C-Projekt kann erfolgreich eine Verknüpfung zu den im separaten Projekt definierten C-Funktionen herstellen und diese aufrufen.
Das obige ist der detaillierte Inhalt vonWie behebe ich Linker-Fehler beim Aufrufen von C-Funktionen aus einem separaten C-Projekt in Visual Studio 2010?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!