![]() |
Bibliotheksfunktion aufrufen
Hi. Ich programmiere in C++ und möchte eine Funktion aus einer eigenen Headerdatei aufrufen und zwar wie folgt:
Ich hab eine lmmin.c, lm_eval.h Datei mit gcc -c lmmin.c -o lmmin.o kompiliert (in lmmin.c steht #include "lm_eval.h") Jetzt möcht ich in C++ eine Funktion aus lmmin.c aufrufen. Mein Problem ist, dass ich das Ganze in C schon gelöst hab, wenn ich jedoch die Funktion aus lmmin.c aus einer Methode meiner Klasse aufrufe, dann gibts: undefined reference to ... Ich hoffe, ich hab das Problem so einigermaßen beschreiben können Lg Stefan |
hi,
du musst entwedr die .h Datei in deiner .cpp includen oder die aufgerufene Funktion als external deklarieren. fg hannes |
Ich hab die .h Datei bereits inkludiert.
Das Komische ist, dass ich in meinem C Programm das Ganze schon zum Laufen gebracht habe. Wenn ich jedoch die Bibliotheksfunktion in meiner Klasse aufrufe (möcht das C Programm einfach auf C++ portieren), dann funktionierts nicht. Muss ich eigene Bibliotheksfunktionen in Klassen anders aufrufen? |
Das Einzige, was mir einfällt:
gcc compiliert nur C, während g++ für C++ zuständig ist (zumindest bin ich bis jetzt immer davon ausgegangen). Ein Unterschied ist z.B. das "name mangling" des C++ Compilers, das verwendet wird, um überladene Funktionen eindeutig zu kennzeichen. Deswegen wird er deine Funktion wahrscheinlich auch nicht finden. Wenn du die Funktionen als C Funktionen exportieren willst, könntest du sie in einen extern "C" Block einschließen. z.B. extern "C" { void func1() { } } |
Du musst die Funktion bzw. Datei einkompilieren, oder damit verlinken...
Code:
mike@honeybadger:~/devel/testimonials$ g++ -o ex++ ex++.cxx ex.c |
hmmm,.... ich hab folgendes:
lm_eval.h schaut so aus: lm_minimize(...); lm_evaluate(...); ... lm_eval.c schaut dann so aus: #include "lm_eval.h" ... void lm_minimize (...) { ... } ... lm_evaluate(...) { } das Gleiche gibts dann nochmals für lmmin.h und lmmin.c und fit1.cpp #include "lmmin.h" #include "lm_eval.h" #include <stdio.h> class something { public: something(void) { lm_minimize(); } }; int main(void) { something a; } so, Fehlermeldung: undefined reference to function lm_minimize(); at line irgendwas |
g++ -o prog fit1.cpp lm_eval.c ?
~ |
nö, geht auch nicht:
Hier hab ich mal folgendes gemacht (nur zur Demonstartion) gcc -c lmmin.c -o lmmin.o gcc -c lm_eval.c -o lm_eval.o gcc lm_test.c lmmin.o lm_eval.o -o lm_test Funktioniert!! Und jetzt: cp lm_test.c lm_test.cpp gcc -g lm_test.cpp lmmin.o lm_eval.o -o lm_test Fehlermeldung: Undefined reference to lm_evaluate(...) , usw. |
g++ liefert gleiches Ergebnis
|
OK, Problem gelöst. mit g++ fit1.cpp lm_eval.c ... gehts doch
Interessanterweise funktioniert g++ fit1.cpp lm_eval.o ... nicht gcc fit1.c lm_eval.o aber schon hmmm, naja, mit dem beschäftige ich mich später. Thx jedenfalls |
Alle Zeitangaben in WEZ +2. Es ist jetzt 10:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag