C und C++ mixen
-
Ich will in einem Programm C und C++ mixen.
Dazu soll man ja:
->main() mit dem C++ Compiler compilen
->den Linkervorgang vom C++ Compiler machen lassenIch rufe nun in main eine C Funktion auf, die ich im Headerfile sample.h includiere.
Diese include Anweisung habe ich in einen 'extern "C" Block' gewrappt//sample.cpp extern "C" { //Deklartion [i]und[/i] Definitionen!! #include <sample.h> } int main() { //... }(Die Funktionen sind in sample.h nicht nur deklariert, sondern auch definiert.)
Trotzdem kommen zahlreiche errors, wenn ich sample.cpp mit dem C++ Compiler compile.
UniX:~/Desktop/h4/project$ g++ sample.cpp In file included from sample.cpp:17: /home/raptor/Desktop/h4/project/sample.h: In function `void setsignal()': /home/raptor/Desktop/h4/project/sample.h:88: error: invalid conversion from `void (*)()' to `void (*)(int)' /home/raptor/Desktop/h4/project/sample.h:88: error: initializing argument 2 of `void (* signal(int, void (*)(int)))(int)' /home/raptor/Desktop/h4/project/sample.h: In function `void shell(SSH_SESSION*)': /home/raptor/Desktop/h4/project/sample.h:173: error: invalid conversion from `void (*)()' to `void (*)(int)' /home/raptor/Desktop/h4/project/sample.h:173: error: initializing argument 2 of `void (* signal(int, void (*)(int)))(int)'Mit dem C Compiler wird alles fehlerlos uebersetzt.
Wie muss ich meine Compiler(gcc und g++) steuern, damit mein Programm korrekt uebersetzt und gelinkt wird(Womit muss ich das C Header File compilen? Muss ich es schon irgnedwie vorcompilieren?)?thx in advance
-
Raptor schrieb:
(Die Funktionen sind in sample.h nicht nur deklariert, sondern auch definiert.)
Hab das noch nie probiert aber du sagst das die funktionen im header nicht nur declariert sondern auch implementiert sind müssen sie wahrscheinlich auch der c++ syntax folgen da sich das extern"C" ja nur auf das namemangling bezieht.
Ich würde die funktionen im header nur declarieren und in einem separaten .c -file implementieren und dann zum projekt dazulinken.
Kurt
-
Es gibt da zwei Wege: Du "reinigst" Dein C von allem, was der C++ Compiler, wegen seines strikteren Type-Handlings nicht mag oder:
Du schreibtst die die Deklarationen der C-Funktionen in einen Header, bindest ihn ein und compilierst den C-File (mit den eigentlichen Sources) als C. Dem Linker natuerlich nicht vergessen zu sagen, dass dort eine Objectdatei einzubinden ist.
-
Genau. So etwas hatte ich vermutet. Erst das C File mit dem gcc kompilieren und dann dazulinken. Ich weiss nur leider nicht, welche gcc Optionen icb brauche. Hab das noch nie gemacht.
Kann mir kurz jemand dabei helfen?
-
Raptor schrieb:
Genau. So etwas hatte ich vermutet. Erst das C File mit dem gcc kompilieren und dann dazulinken. Ich weiss nur leider nicht, welche gcc Optionen icb brauche. Hab das noch nie gemacht.
Kann mir kurz jemand dabei helfen?Keine besonderen optionen
gcc für c-files
g++ für c++-files
Kurtedit: Beispiel
gcc -c shape.c
g++ main.cpp shape.o -o myexe
-
funzt! danke
