'libraryname': undefined reference to 'functionname'

dunkler_Elf

dunkler_Elf

Eroberer
Hallo zusammen,

Erst mal das Allgemeine:
Ich benutze SuSE 10.3 als Betriebssystem und Eclipse als IDE.
Meine C++ Kenntnisse sind nicht wirklich berauschend.
(Im Rahmen des Studiums bekamen wir einen C-Grundlagen-Kurs unter Windows und nun müssen wir für eine Projektarbeit in C++ unter Linux arbeiten.)

Projektbeschreibung:
Ich muss ein Programm zur Steuerung eines mobilen Roboters (Festo Robotino) über WLAN schreiben. Das Schöne daran ist, dass die ganzen Header und Libraries schon vorhanden sind und ich sie einsetzen muss.
Bei den alten (robotino.ha und librobotino.so) hat das auch nach einigem hin und her funktioniert.
Nun soll ich es aber mit den aktuellen Versionen machen.
Dort gibt es eine zentrale Header (all.h), die dann alle anderen einbindet und wieder eine Library (librec_robotino_com.so).
Nachdem ich meine Projektdatei auf die neuen Klassen umgeschrieben habe und der Compiler erst mal zufrieden war, beschwerte sich der Linker.
(Das gleiche Problem tritt übrigens auch einem mitgelieferten Beispielprogramm auf, das einfach nur zu kompilieren versucht habe OHNE es zu verändern).

Mein Problem:
Beim Linken des Beispielprogramms gibt mir der Linker folgende Fehlermeldungen:
**** Build of configuration Release for project circle3 ****

make all
Building target: circle3
Invoking: GCC C++ Linker
g++ -L/usr/lib -o"circle3" ./src/circle3.o -lrec_robotino_com
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::setGripperClosed(bool)'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::motorCurrent(unsigned int, float*) const'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::setRobotinoImageReceivedCallback(void (*)(void*, unsigned char const*, unsigned int, RobotinoImageType), void*)'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::encoderInput(int*, int*) const'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::setGripperEnabled(bool)'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::resetEncoderInputPosition(bool)'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::isGripperClosed() const'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::setOdometry(float, float, float)'
/usr/lib/librec_robotino_com.so: undefined reference to `QDSA_Encoder::QDSA_Encoder(unsigned char*, unsigned int, unsigned char*, unsigned int, bool)'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::isGripperOpened() const'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::getOdometry(float*, float*, float*)'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::setNorthStarCommand(rec::robotino::com::NorthStarCommand const&)'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::position(unsigned int) const'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::setPowerOutput(float)'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::update()'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::powerOutputCurrent(float*) const'
/usr/lib/librec_robotino_com.so: undefined reference to `RobotinoCom::setRelay(unsigned int, bool)'
collect2: ld returned 1 exit status
make: *** [circle3] Fehler 1
(Beim eigentlichen Projekt sieht der Fehler genauso aus.)

Der Fehler wird also von der Library verursacht.
Die Funktionen, die ihm fehlen, tauchen allerdings nur in der alten Header auf - nicht in der neuen.
Laut Dokumentation sind aber nur noch die neuen notwendig.
Aber selbst das Einbinden der alten Header und Library hilft nicht.

Ich kann auch nach längerer Suche keinen Fehler finden.
Für einen Anhaltspunkt wovon er ausgelöst werden kann, wäre ich sehr dankbar.

dunkler_Elf

___________________________________________________
#edit -----------------------------------------------------

Ok, der Fehler ist gefunden.

Also:
Die neuen Header/Libraries benötigen tatsächlich die alten.
Das hätte auch funktioniert, wenn die aktuellen Versionen der alten vorhanden gewesen wären.
Beim Einfügen der neuen hatte ich, die im Paket enthaltenen alten, nicht über die schon vorhandenen alten geschrieben. Die neuen konnten mit den veralteten Versionen den alten nichts anfangen.
Nach dem Überschreiben funktioniert es nun.

dunkler_Elf
 
Zuletzt bearbeitet:

Ähnliche Themen

Linkerproblem mit MXE

Funktion nicht gefunden

OpenSuse 12.3 / Tiefschlaf funktioniert nicht

Amarok stoppt nach jedem Stück

Windows clients können nicht mehr auf lange laufendes System zugreifen

Zurück
Oben