Problem beim kompilieren



  • Hallo bin neu hier und habe folgendes Problem,
    möchte ein C++ programm kompilieren und bekomme diese Fehlermeldung:

    /home/stefan/usr/glc_lib/libGLC_lib.so: undefined reference to gluUnProject' /home/stefan/usr/glc\_lib/libGLC\_lib.so: undefined reference togluPerspective'
    /home/stefan/usr/glc_lib/libGLC_lib.so: undefined reference to gluErrorString' /home/stefan/usr/glc\_lib/libGLC\_lib.so: undefined reference toQuaZip::setFileNameCodec(char const*)'
    /home/stefan/usr/glc_lib/libGLC_lib.so: undefined reference to `gluLookAt'

    Die Bibliothek libGLC_lib habe ich gelinkt. Aber so verstehe ich das, benötigt libGLC_lib die Funktionen die dann nicht gefunden werden, stimmt diese Beschreibung ?
    Die Funktion `gluUnProject' wird in der Datei glu.h definiert.
    Fehlt da eine andere Bibliothek ? Wenn ja welche könnte das sein ?
    Oder hab ich ein Problem mit der Version der libGLC_lib ? Verwende libGLC_lib.so.2.2.
    Wäre für Hilfe sehr dankbar, suche jetzt schon ewig.

    Viele Grüße
    Stefan



  • http://stackoverflow.com/questions/17420529/gluunproject-is-not-recognised-during-build
    bzw. -> google undefined reference to gluUnProject
    Die gluUnProject-Funktion wird nicht in der Glu.h definiert, sondern nur deklariert, die Definition ist in irgendeiner Lib, welche du offensichtlich noch nicht gelinkt hast. Ich kompiliere die SFML-Lib, welche auch die Glu.h includiert, unter Windows indem ich unter anderem die Glew.lib und Opengl.lib linke.

    Oder schau einfach hier:
    http://msdn.microsoft.com/en-us/library/windows/desktop/dd374157(v=vs.85).aspx
    Glu32.lib musst du noch linken.



  • Hallo Mr.Long,
    danke für den Tip werde die Bibliothek GLU32.lib ausprobieren.

    Grüße
    Stefan



  • Hallo Mr.Long,
    hab mir die Glu32.lib angeschaut. So wie ich das verstehe ist die für Windows. Ich benutze Ubuntu 12.04, gibt es eine Lib für Ubuntu ?
    Vorab besten Dank.

    Viele Grüße
    Stefan


  • Mod

    Klar gibt es die und du hast sie wahrscheinlich auch schon installiert, aber beim Linken nicht angegeben.

    Füg deinem Compiler/Linkeraufruf mal "-lGL -lGLI" hinzu (ohne Anführungszeichen).



  • Hallo SeppJ,
    danke für Deine Antwort. Die Lib GL habe ich gelinkt. Die GLI habe ich nicht gelinkt, muss ich noch schauen ob ich die hab.

    Grüße
    Stefan


  • Mod

    Tippfehler. Soll natürlich GLU, nicht GLI heißen. 'Tschuldigung.

    Achte auch auf die Reihenfolge. So wie ich es geschrieben habe, sollte es passen, wenn ich die Abhängigkeiten noch richtig im Kopf habe (ist eine Weile her, dass ich OpenGL gemacht habe). Falls es nicht geht, probier es mal anders herum.



  • Hallo SeppJ,
    die Bemerkung, dass die Reihenfolge in der ich die Libs einbinde von Bedeutung ist hat mir weiter geholfen. Compilierung läuft jetzt durch.
    Vielen Dank für den Tipp.

    Beim Programmstart bekomme ich jetzt diese Fehlermeldung:

    ./qngctrl: symbol lookup error: ./qngctrl: undefined symbol: _ZN12GLC_ViewportC1EP9QGLWidget

    Was kann das sein ?

    Grüße
    Stefan


  • Mod

    Etwas in deinem System ist falsch eingerichtet. Gib folgende Information:
    1. Genauer Linkeraufruf
    2. Ausgabe von ldd auf deine Executable
    3. Wert der Umgebungsvariablen LD_LIBRARY_PATH und LD_RUN_PATH, falls vorhanden.

    Diese Angaben enthalten eventuell Informationen über dein System (Nutzername), die du zensieren solltest, bevor du sie hier postest.



  • Hallo SeppJ,
    danke für Deine Antwort...

    Wo finde ich den Linkeraufruf, im Makefile ?

    Wie kann ich den Inhalt der Umgebungsvariablen LD_LIBRARY_PATH und LD_RUN_PATH
    sichtbar machen ?

    Hier das Ergebnis von ldd:

    stefan@stefan-Vostro-1015:~/Microcopter/ngos-0.68/sources/ng-tools/qngctrl$ ldd qngctrl
    linux-gate.so.1 => (0xb76eb000)
    libGLC_lib.so.2 => /usr/local/lib/libGLC_lib.so.2 (0xb7520000)
    libGLU.so.1 => /usr/lib/i386-linux-gnu/libGLU.so.1 (0xb74ab000)
    libqwt.so.6 => /usr/lib/libqwt.so.6 (0xb73cd000)
    libQtWebKit.so.4 => /usr/lib/i386-linux-gnu/libQtWebKit.so.4 (0xb5a73000)
    libQtSvg.so.4 => /usr/lib/i386-linux-gnu/libQtSvg.so.4 (0xb5a1e000)
    libQtOpenGL.so.4 => /usr/lib/i386-linux-gnu/libQtOpenGL.so.4 (0xb5921000)
    libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0xb4e4e000)
    libQtNetwork.so.4 => /usr/lib/i386-linux-gnu/libQtNetwork.so.4 (0xb4d00000)
    libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0xb4a23000)
    libGL.so.1 => /usr/lib/i386-linux-gnu/mesa/libGL.so.1 (0xb49ca000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb49af000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb48ca000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb489d000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb487f000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb46d5000)
    libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb4630000)
    libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xb4626000)
    libgstapp-0.10.so.0 => /usr/lib/i386-linux-gnu/libgstapp-0.10.so.0 (0xb4618000)
    libgstinterfaces-0.10.so.0 => /usr/lib/i386-linux-gnu/libgstinterfaces-0.10.so.0 (0xb4607000)
    libgstpbutils-0.10.so.0 => /usr/lib/i386-linux-gnu/libgstpbutils-0.10.so.0 (0xb45e4000)
    libgstvideo-0.10.so.0 => /usr/lib/i386-linux-gnu/libgstvideo-0.10.so.0 (0xb45c6000)
    libgstbase-0.10.so.0 => /usr/lib/i386-linux-gnu/libgstbase-0.10.so.0 (0xb4566000)
    libgstreamer-0.10.so.0 => /usr/lib/i386-linux-gnu/libgstreamer-0.10.so.0 (0xb447d000)
    libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xb442e000)
    libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb4335000)
    libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xb4201000)
    libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb41eb000)
    libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xb4150000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb414b000)
    libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xb4117000)
    libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0xb40fe000)
    libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb40d4000)
    libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xb40ca000)
    libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xb40b0000)
    libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xb409f000)
    libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xb408d000)
    librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb4084000)
    /lib/ld-linux.so.2 (0xb76ec000)
    libglapi.so.0 => /usr/lib/i386-linux-gnu/libglapi.so.0 (0xb406d000)
    libXdamage.so.1 => /usr/lib/i386-linux-gnu/libXdamage.so.1 (0xb4069000)
    libXfixes.so.3 => /usr/lib/i386-linux-gnu/libXfixes.so.3 (0xb4063000)
    libX11-xcb.so.1 => /usr/lib/i386-linux-gnu/libX11-xcb.so.1 (0xb4060000)
    libxcb-glx.so.0 => /usr/lib/i386-linux-gnu/libxcb-glx.so.0 (0xb4048000)
    libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb4026000)
    libXxf86vm.so.1 => /usr/lib/i386-linux-gnu/libXxf86vm.so.1 (0xb4020000)
    libdrm.so.2 => /usr/lib/i386-linux-gnu/libdrm.so.2 (0xb4013000)
    liborc-0.4.so.0 => /usr/lib/i386-linux-gnu/liborc-0.4.so.0 (0xb3f83000)
    libgmodule-2.0.so.0 => /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0 (0xb3f7d000)
    libxml2.so.2 => /usr/lib/i386-linux-gnu/libxml2.so.2 (0xb3e30000)
    libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xb3e29000)
    libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb3ded000)
    libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb3dc3000)
    libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xb3d66000)
    libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xb3d62000)
    libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xb3d5c000)
    libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xb3d55000)


  • Mod

    spunkt schrieb:

    Wo finde ich den Linkeraufruf, im Makefile ?

    Auch. Aber unleserlich. Wird der denn nicht angezeigt beim Linken?

    Wie kann ich den Inhalt der Umgebungsvariablen LD_LIBRARY_PATH und LD_RUN_PATH
    sichtbar machen ?

    echo $LD_LIBRARY_PATH
    

    Das hätte man auch ganz fix googeln können. Du musst schon ein bisschen mitarbeiten.

    Erklärung für deinen Fehler: Beim Linken wird offenbar eine andere Bibliothek benutzt als die, die zur Laufzeit geladen ist. Beim Linken ist das besagte Symbol vorhanden (QGLWidget Viewport), daher funktioniert das Linken, aber in der Laufzeitbibliothek ist das Symbol dann nicht mehr vorhanden. Also dreht sich das Problem um einen Fehler in der Konfiguration der libQtOpenGL*. Fällt dir dazu vielleicht irgendwas ein, was du in deinem System verpfuscht haben könntest? Irgendetwas ungewöhnliches, das du mit dieser Bibliothek beim Linken gemacht hast? Irgendetwas, das du vielleicht mehrfach installiert hast?

    *: Ich bin mir nicht 100% sicher, ob das Symbol in dieser Bibliothek oder einer der anderen Qt-Bibliotheken definiert werden soll. Wenn dir mögliche Problemursachen zu den anderen Bibliotheken einfallen, dann solltest du diese nicht verschweigen.



  • Hallo SeppJ,
    vielen Dank für die Fehlerbeschreibung und die Hinweise.
    Linkeraufruf und Inhalt LD_LIBRARY_PATH werde ich noch posten, bin noch nicht dazugekommen.
    Sorry für die Frage bezüglich LD_LIBRARY_PATH, bin ziehmlich unerfahren was Ubuntu angeht und war mir nicht sicher was richtig ist echo oder export.
    Versuche eigentlich schon zuerst mal google zu bemühen.

    Viele Grüße und danke für die Hilfe
    Stefan



  • spunkt schrieb:

    Wie kann ich den Inhalt der Umgebungsvariablen LD_LIBRARY_PATH und LD_RUN_PATH
    sichtbar machen ?

    Mit env oder echo $LD_LIBRARY_PATH


Anmelden zum Antworten