Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich Linker-Fehler beim Aufrufen von C-Funktionen aus einem separaten C-Projekt in Visual Studio 2010?

Wie behebe ich Linker-Fehler beim Aufrufen von C-Funktionen aus einem separaten C-Projekt in Visual Studio 2010?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 09:51:02835Durchsuche

How to Resolve Linker Errors When Calling C Functions from a Separate C   Project in Visual Studio 2010?

Linkerfehler beim Aufrufen einer C-Funktion aus C-Code in einem separaten VS2010-Projekt

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:

  • functions.h – Header-Datei mit externen Deklarationen von C-Funktionen
  • functions.c – Implementierungsdatei mit Funktionsdefinitionen und notwendigen Exportmakros

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!

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