PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : undefined reference in libqwt



zorin
19-10-2008, 16:12
Hallo Zusammen,

ich habe folgendes Problem:

Ich habe mir die libqwt aus den Quellen neu gebaut und in
/usr/local/qwt-5.1.1/ installiert. Den ld cache habe ich upgedated, sollte geklappt haben:



ldconfig -p |grep qwt
libqwt.so.5 (libc6,x86-64) => /usr/local/qwt-5.1.1/lib/libqwt.so.5
libqwt.so (libc6,x86-64) => /usr/local/qwt-5.1.1/lib/libqwt.



Wenn ich nun ein Programm kompiliere, findet der Linker keine der libqwt-Funktionen die ich in meinem Programm aufrufe:

undefined reference to `QwtPlot::QwtPlot(QWidget*)'

Die Header-Dateien habe ich meines Erachtens nach richtig deklariert:


#include "/usr/local/qwt-5.1.1/include/qwt_plot.h"

Außerdem habe ich die libqwt aus der Ubuntu Installation eh entfernt.
Die Compileroption für den Linker habe ich wahlweise mit -lqwt (geht gar nicht "cannot find -lqwt") und mit -L/usr/local/qwt-5.1.1/lib/libqwt.so probiert.

Kann jemand helfen. Vielen Dank im Voraus
Gruß Zorin

PS: Hintergrund, warum ich nicht die Version aus Ubuntu nehme:
Die Bibliothek an sich hat in Hardy Heron Version 5.0.2-2, die Dokumentation ist aber Version 4.2.0-4. Da scheint sich einiges geändert zu haben. Ich habe dann die Dokumentation von der Hompage als Referenz nehmen wollen, aber die ist Version 5.1.1, also wieder anders :-(

undefined
19-10-2008, 21:57
Ich habe mir die libqwt aus den Quellen neu gebaut und in
/usr/local/qwt-5.1.1/ installiert......
Lese die Dokumentation oder Manpage von "ld" und Speziel das Thema LD_LIBRARY_PATH und /etc/ld.so.conf

anda_skoa
20-10-2008, 12:11
Die Compileroption für den Linker habe ich wahlweise mit -lqwt (geht gar nicht "cannot find -lqwt") und mit -L/usr/local/qwt-5.1.1/lib/libqwt.so probiert.


Die -L Option erwartet nur auf ein Verzeichnis, nicht auf eine Datei, d.h. in deinem Fall nur /usr/local/qwt-5.1.1/lib kombiniert mit der -l Option um den Namen der Bibliothek zu übergeben (-lqwt sollte hier OK sein)

Ciao,
_

undefined
20-10-2008, 12:31
Damit wird er es kompiliert bekommen aber beim test scheitert es wieder daran das sein lwt Installation nicht im LD_LIBRARY_PATH liegt.
Das beste wäre lwt in --prefix=/usr/local zu Installieren damit ist das Problem beseitigt. Der linker holt sich dann ohne hin die neuere Version wenn die alten devel Pakete nicht Installiert sind.

anda_skoa
21-10-2008, 12:20
Damit wird er es kompiliert bekommen

Darum ging es aber meiner Interpretation nach in der Frage (undefined reference Fehlermeldung)


aber beim test scheitert es wieder daran das sein lwt Installation nicht im LD_LIBRARY_PATH liegt.

Der angegeben ld_config Output sieht gut aus. Bist du sicher dass LD_LIBRARY_PATH in diesem Fall noch nötig ist?

Ciao,
_

zorin
23-10-2008, 21:45
Hey,

erstmal vielen Dank für die Antworten. Dachte eigentlich der ldconfig-Befehl mit dem erfolgreichen Auflisten der libqwt sollte reichen. Neu für mich ist auch, dass -L nur den Pfad angibt und dann zusätzlich(!) mit -l die Bibliothek an sich angegeben werden muss.
Auf jeden Fall hab ich Held grad gemerkt, dass es auch eine aktuelle, zur Bibliothek passende Doku in den Ubuntu Repositories gibt, hab ich anfangs übersehen. Hat sich also erledigt, aber trotzdem was gelernt.

Gruß Zorin

anda_skoa
24-10-2008, 13:14
Die -L und -I (großes i) Direktiven erweitern die Suchpfade des Compilers/Linkers bzw. erlauben auch die Reihenfolge wo gesucht wird festzulegen.

Welche Dateien dann gesucht werden ist im Falle des Compilers eben durch #include Direktiven in den Headers/Sourcen und im Falle des Linkers du -l Direktiven auf der Commandline festgelegt.

ldconfig bzw LD_LIBRARY_PATH sind Angaben, die das Lookup-Verhalten zur Laufzeit (Start) des Programms beeinflussen.

Ciao,
_