Eine C++-Funktion in ein C-Programm einbinden
-
Moin, Moin...
Ich schreibe ein Programm in C (unter Unix mit gcc) und muss eine Bibliothek einbinden, die in C++ geschrieben wurde. Nun meldet der Linker immer einen Fehler, obwohl die Bibliothek eingebunden wird. Es gibt ja Unterschiede zwischen C und C++ bezüglich des Formats der Funktionsnamen in den Objektdateien. Wenn ich ein C++-Programm erstelle und eine C-Funktion einbinden möchte, so deklariere ich die Funktion ja als eine C-Funktion:
extern "C" int foo();
Geht auch der umgekehrte Weg? In einem C-Programm eine C++-Funktion deklarieren?
z.B.
extern "C++" int foo();
(So geht es nicht)
Wenn nicht, wie mache ich dem Linker klar, das er eine C++-Funktion zum C-Programm binden soll?
Danke im voraus...
-
Du machst unterm Strich ein C++-Programm und klemmst die Teile, die in C geschrieben sind hier rein:
#ifdef __cplusplus extern "C" { #endif ... #ifdef __cplusplus } #endif
-
Herzlichen Dank für die Info. Leider bin ich nicht weitergekommen. Ich habe vier Dateien:
foo1.c, foo2.c, foo3.c und main.c
Nur in main.c wird eine Funktion aufgerufen, die aus einer Bibliothek stammt, die in C++ geschrieben ist. Ich habe die obigen Zeilen
#ifdef __cplusplus extern "C" { #endif ... #ifdef __cplusplus } #endif
in alle Dateien eingefügt und die Endungen auf .cc geändert. Egal welche Kombinationen und Varianten ich verwende, stets meckert der Linker rum.
Ich bin mit meinem Latein am Ende...
-
Das ist schon merkwürdig. Versuche es nochmal anders. Reduziere main.cc auf
main selbst, verwende dort das extern C selbst nicht, sondern nur in den
Headern der foo-Dateien, sodass er wirklich gezwungen wird in C++ zu übersetzen.
Du musst es zuerst einmal schaffen, dass er nicht den Aufruf der Library, sondern - wenn überhaupt - den Aufruf Deiner C-Funktionen anmeckert.