Linker-Prob
-
Dann link das Modul halt dazu. Im Ernst, die konkrete Lösung hängt wohl von
deiner IDE/Compiler ab.
-
sorry, ich sehe soetwas leider nicht...
Mein Compiler ist VS .Net 2003
-
Also jetzt mal ernsthaft. Warum muss ich da was linken. Eigentlich ist doch alles wunderbar (siehe z.B: http://www.user.tu-berlin.de/looprjbb/it/C_Kurs/funktion/Html/lektion_4/lektion_4.html), oder ist etwas mein Compiler kaputt?
-
doggy schrieb:
Ich habe ein komscihes Problem. Hier mal ein wenig Code:
main.cpp #include "main.h" int EineFunktion() { DooFoo(); return 0; } main.h #include "foo.h" foo.h int DoFoo(); foo.c int DoFoo() { return 0; }
Aus irgendeinem Grund kann der Linker DoFoo nicht finden (foo.c wird aber mitkomplimiert). Wo liegt das Problem?
Danke,
Dogg
DooFoo() <=> DoFoo()
-
Sorry, das war mein Fehler. Es heißt natürlich in der main.cpp DoFoo. In wirklichkeit geht es auch um komplexere Angelegenheiten...
Trotzdem, die Fehler kommt erst beim Linken...
-
Doggy schrieb:
Es heißt natürlich in der main.cpp DoFoo
so natürlich ist das nicht, man weiß ja nie mit wem man's zu tun hat... so stimmt der code dann jedenfalls und man kann da jetzt nichts weiter zu sagen.
-
Ja, sorry, ich muss mich mal regestrieren...
Achja, foo.c ist eine C-Datei, nicht C++, wobei mein Compiler auch eine foo.obj (wie eine main.obj) erzeugt...
-
so sollte es gehen
main.cpp #include "main.h" int EineFunktion() { DooFoo(); return 0; } main.h extern "C" { #include "foo.h" } foo.h int DoFoo(); foo .c int DoFoo() { return 0; }
Kurt
edit formatierung
-
Dein Problem liegt vermutlich am name-mangling von Funktionen. Das ist in C und C++ unterschiedlich. Und zwar bekommst du damit Probleme, wenn dein Compiler foo.c als C Datei compiliert und main.cpp als C++ Datei. Deine Header Deklaration sollte deshalb wie folgt aussehen
// foo.h #ifdef __cplusplus extern "C" { #endif int DoFoo(); // hier kannst du noch mehr Funktionsdeklarationen hinschreiben #ifdef __cplusplus } #endif
-
Oh, danke... Jetzt klappt es...