Problem mit Makefile / C++

A

Andrea

Routinier
Hallo,

ich hab eine Klasse A und dafuer ein automatisch erstelltes Makefile. Rauskommen soll libA.so, das funktioniert auch soweit.
Allerdings brauche ich jetzt auch noch eine Klasse B, ich hab den header von B in A eingebunden und bekomme auch keine Fehler beim Kompilieren. Wenn allerdings libA.so aufgerufen wird, habe ich einen Fehler "undefined symbol" wegen einer Funktion aus B.

Wie gebe ich das richtig an, so dass die Klasse B auch wirklich beruecksichtigt wird?

Ich habe uebrigens immer folgende Warnung beim Kompilieren:
g++: -lcvaux: linker input file unused because linking not done
fuer alle angegeben Bibliotheken. Hat es etwas damit zu tun?

Danke schonmal,
Andrea
 
Es wuerde mehr helfen, wenn Du die Fehlermeldungen per cut-and-paste hier anfuegen koenntest.

Zur ersten Frage: Du kannst also ein executable erzeugen, dass Dir einen Laufzeitfehler ergibt? Ich vermute, dass die Bibliothek libA.so nicht gefunden wird. Dazu muesste sie entweder in /lib, /usr/lib oder einer der Verzeichnisse, die in /etc/ld.so.conf angegeben sind liegen. Oder, und das ist hier fuer eine eigene Bib wohl das Beste, Du fuegst das Verzeichnis, in dem libA.so liegt, der Variable LD_LIBRARY_PATH hinzu:
Code:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/pfad/zur/bib
Letztlich koenntest Du das Programm auch statisch linken. Dazu muesstest Du mittels ar aus den objekt-Dateien, aus denen libA.so erstellt wird, ein Archiv kreieren:
Code:
ar c libA.a file1.o file2.o ...

Zur zweiten Frage: vermutlich benutzt Du keine Funktion aus der Bibliothek cvaux, und da Du sie trotzdem angibst zum Linken, gibt der Compiler die Nachricht aus, dass er sie gar nicht benoetigt.
 
Moeglicher Fehler ist, wie rikola auch schon sagte, dass die Bibliothek nicht gefunden wird. Den Pfad, wo die Lib liegt, kannst du ja einfach mal dem Compiler mit -L mitgeben um sicherzustellen, dass der auch weiss, wo er suchen kann.
 
Hallo,

also die libA.so gibt es, die wird auch gefunden...

iceWing, Warning in main/plugin.c at 300: dlopen('/usr/local/lib/iceWing/libdescriptors.so') error:
/usr/local/lib/iceWing/libdescriptors.so: undefined symbol: _ZN8keypoint14set_hgEv !

Das ganze soll ein Plugin fuer ein Framework werden, dass die libA.so (libdescriptors.so) laedt. Fuer libdescriptors.so brauche ich die Klasse keypoint, die wird laut undefined symbol nicht gefunden... Ohne die kryptischen Zeichen heisst die Klasse keypoint, der Aufruf in der lib kp->set_hg...

Beim Compilieren gibt es nur Warnungen, wegen unbenutzter Variablen.

Andrea
 
Hast du evtl. im Programm nicht den richtigen Namespace angegeben?
 
Wo soll denn die Klasse keypoint herkommen?

Vielleicht hilft es ja auch, das Makefile zu posten?
 

Ähnliche Themen

Mondorescue über Cron-Job

Open-Xchange auf OpenSuse mit Commu. Installer - Compiler Fehler

OpenSuse 11.1 USB Festplatte wird nicht erkannt

Problem bei Installation von VLC Player und Super Karamba

Meine Distri spielt verrückt !

Zurück
Oben