*.c Dateien kompilieren/linken
-
Hallo zusammen,
ich habe eine C-API um OneWire Bausteine anzusprechen.
Diese API liegt in C als *.c Dateien vor.
Wenn ich alle Dateien meinem Projekt hinzufüge kann ich alles kompilieren, allerdings der Linker beschwert sich das die Funktionen nicht gefunden werden.
Objekt Dateien wurden von den C-Dateien erzeugt.Wenn ich mich recht erinnere liegt dies an der Dateiendung.
Hat hier jemand einen Rat wie ich dies lösen kann (ohne alle Dateien umzubenennen)?Verwende XE3 und versuche mich an einer Konsolenapplikation.
MfG Stephan
-
Hallo Stephan,
sind es deine Funktionen oder sind es Funktionen aus der API die nicht aufgelöst werden ? Meistens "schimpft" der Linker weil der Pfad zur API nicht richtig angegeben wurde. Vielleicht prüftst Du das nochmalGruß
-
Hallo CBuilder_Fan,
es sind die API-Funktionen die nicht gefunden werden.
Der Pfad passt, und in der Linker Befehlszeile steht auch das entsprechende obj mit drin.
Das ganze muß etwas mit der *.c Endung zu tun haben, denn wenn ich alles in cpp ändere funktioniert es.
Allerdings finde ich dies keine gute Lösung.MfG Stephan
-
Sind die Funktionen als extern "C" deklariert?
-
MFK schrieb:
Sind die Funktionen als extern "C" deklariert?
So wie es aussieht nicht, da dies eine C-API ist die auch in Mikrocontrollern usw. zum Einsatz kommt/kommen kann.
Heißt dies, daß ich die ganzen Funktionen bzw. Deklarationen in einen extern "C" Block einschließen muß?
MfG Stephan
-
Stephan schrieb:
Heißt dies, daß ich die ganzen Funktionen bzw. Deklarationen in einen extern "C" Block einschließen muß?
Ja, aber nur für den C++-Compiler. Der C-Compiler kann mit extern "C" nichts anfangen. Daher sieht das üblicherweise so aus:
#ifndef INCLUDE_GUARD_SYMBOL #define INCLUDE_GUARD_SYMBOL #ifdef __cplusplus extern "C" { #endif // Hier die API-Deklarationen #ifdef __cplusplus } #endif #endif
-
MFK schrieb:
Stephan schrieb:
Heißt dies, daß ich die ganzen Funktionen bzw. Deklarationen in einen extern "C" Block einschließen muß?
Ja, aber nur für den C++-Compiler. Der C-Compiler kann mit extern "C" nichts anfangen. Daher sieht das üblicherweise so aus:
#ifndef INCLUDE_GUARD_SYMBOL #define INCLUDE_GUARD_SYMBOL #ifdef __cplusplus extern "C" { #endif // Hier die API-Deklarationen #ifdef __cplusplus } #endif #endif
Ich glaube ich gehe doch den Weg die Dateien in CPP umzubenennen, denn es handelt sich hierbei um mehr als 50 Dateien
Vielen Dank.
MfG Stephan
-
Bedenke aber, daß nicht jeder C-Code korrekter C++-Code ist!
An deiner Stelle würde ich aus den C-Dateien eine eigene Bibliothek (Library) erzeugen und diese dann in deinem Projekt benutzen. So brauchst du dann nur eine passende Header-Datei für dein C++Projekt erzeugen (d.h. relativ geringer Arbeitsaufwand).