2012-02-26 11 views
9

Mam taki sam błąd niż here. Tam nie ma rozwiązania, a także spróbuję wyjaśnić to dokładniej, więc mam nadzieję, że ktoś ma rozwiązanie. Zainstalowałem też wszystko, począwszy od odpowiedzi na pytanie this.Błąd Qt: niezdefiniowane odniesienie do 'gluOrtho2D'

Próbuję skompilować program, który zrobił przyjaciel w QT (Linux). Próbowałem go w systemie Windows i działa dobrze, problem polega na tym, że nie mogę go uruchomić w systemie Ubuntu 11.10.

Jest to kompilacja wyjście na QT:

... 
glwidget.o:glwidget.cpp:function GLWidget::resizeGL(int, int): error: undefined reference to 'gluOrtho2D' 
glwidget.o:glwidget.cpp:function GLWidget::projectScene(): error: undefined reference to 'gluOrtho2D' 
make: Leaving directory... 
collect2: ld returned 1 exit status 
make: *** [QTapplication] Error 1 
... 
  • glu.h i gl.h są #included.
  • QT + = OpenGL jest umieścić na .pro

Nie wiem, czy to problem Ubuntu 11.10. Czytałem, że ma pewne problemy z linkerem, mimo że pobrałem "binutils-gold", który rzekomo to naprawił. Próbowałem również ręcznie dodać bibliotekę, klikając prawym przyciskiem myszy na projekty .pro-> Add Librarys, ale nie pozwolę mi nic dodać w "/ usr/include/GL".

Wreszcie, oto pełna moc kompilacji:


make: Entering directory `/home/daniel/Escritorio/Practica3-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release' 
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/linux-g++ -I../Practica3 -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtOpenGL -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include -I../Practica3/SceneObjects -I../Practica3/SceneObjects/Auxiliar -I/usr/X11R6/include -I. -I. -I../Practica3 -I. -o main.o ../Practica3/main.cpp 
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/linux-g++ -I../Practica3 -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtOpenGL -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include -I../Practica3/SceneObjects -I../Practica3/SceneObjects/Auxiliar -I/usr/X11R6/include -I. -I. -I../Practica3 -I. -o mainwindow.o ../Practica3/mainwindow.cpp 
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/linux-g++ -I../Practica3 -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtOpenGL -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include -I../Practica3/SceneObjects -I../Practica3/SceneObjects/Auxiliar -I/usr/X11R6/include -I. -I. -I../Practica3 -I. -o glwidget.o ../Practica3/glwidget.cpp 
../Practica3/glwidget.cpp:120:6: warning: unused parameter 'event' [-Wunused-parameter] 
/home/daniel/QtSDK/Desktop/Qt/4.8.0/gcc/bin/moc -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/linux-g++ -I../Practica3 -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtOpenGL -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include -I../Practica3/SceneObjects -I../Practica3/SceneObjects/Auxiliar -I/usr/X11R6/include -I. -I. -I../Practica3 -I. ../Practica3/mainwindow.h -o moc_mainwindow.cpp 
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/linux-g++ -I../Practica3 -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtOpenGL -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include -I../Practica3/SceneObjects -I../Practica3/SceneObjects/Auxiliar -I/usr/X11R6/include -I. -I. -I../Practica3 -I. -o moc_mainwindow.o moc_mainwindow.cpp 
/home/daniel/QtSDK/Desktop/Qt/4.8.0/gcc/bin/moc -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/linux-g++ -I../Practica3 -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtOpenGL -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include -I../Practica3/SceneObjects -I../Practica3/SceneObjects/Auxiliar -I/usr/X11R6/include -I. -I. -I../Practica3 -I. ../Practica3/glwidget.h -o moc_glwidget.cpp 
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../QtSDK/Desktop/Qt/4.8.0/gcc/mkspecs/linux-g++ -I../Practica3 -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtCore -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtGui -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include/QtOpenGL -I../../QtSDK/Desktop/Qt/4.8.0/gcc/include -I../Practica3/SceneObjects -I../Practica3/SceneObjects/Auxiliar -I/usr/X11R6/include -I. -I. -I../Practica3 -I. -o moc_glwidget.o moc_glwidget.cpp 
g++ -Wl,-O1 -Wl,-rpath,/home/daniel/QtSDK/Desktop/Qt/4.8.0/gcc/lib -o Practica3 main.o mainwindow.o glwidget.o scene.o pv2d.o regularpolygon.o obstacle.o sceneobject.o rectangle.o paintableobject.o segment.o point.o pen.o bouncingball.o circle.o moc_mainwindow.o moc_glwidget.o -L/home/daniel/QtSDK/Desktop/Qt/4.8.0/gcc/lib -L/usr/X11R6/lib -lQtOpenGL -lQtGui -lQtCore -lGL -lpthread 
glwidget.o:glwidget.cpp:function GLWidget::resizeGL(int, int): error: undefined reference to 'gluOrtho2D' 
make: Leaving directory `/home/daniel/Escritorio/Practica3-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release' 
glwidget.o:glwidget.cpp:function GLWidget::projectScene(): error: undefined reference to 'gluOrtho2D' 
collect2: ld returned 1 exit status 
make: *** [Practica3] Error 1 
16:44:35: The process "/usr/bin/make" exited with code 2. 
Error while building project Practica3 (target: Desktop) 
When executing build step 'Make' 
+0

, czy nagłówki są zawarte tutaj nie ma znaczenia - masz błąd linkera nie błąd kompilatora. Aby to naprawić, musisz się upewnić, że poprawnie łączysz bibliotekę glukozy. –

+0

Wygląda na to, że łączysz się z GL, ale nie z Glu. Spróbuj dodać -GLGL i sprawdź, czy to pomaga. –

+0

możliwy duplikat [niezdefiniowanego odniesienia do 'gluOrtho2D '] (http://stackoverflow.com/questions/9326380/undefined-reference-to-gluortho2d) –

Odpowiedz

9

Trzeba dodać odpowiednie bibliotek do opcji linkera .

Biblioteki są dodawane z opcjami -l (małe litery L). Nie są to ścieżki, ale rzeczywiste pliki zawierające kod. W systemie Linux pliki te mają rozszerzenia .so*. W systemie Windows są to pliki .dll. Rozszerzenia różnią się na innych platformach.

Jednym z pytań, które łączą stwierdza, że ​​potrzebne są następujące biblioteki: (. gluOrtho2D jest rzeczywiście w libGLU, ale może brakować inni)

-lglut -lGL -lGLU -lGLEW 

Czytaj docs IDE, aby zobaczyć jak należy je dodać do opcji linkera, ale wiele pozwala na wpisanie ich tak samo w prawym obszarze ustawień projektu.

Jeśli te biblioteki nie są w zwykłych ścieżek biblioteki na komputerze (/lib, /usr/lib na Linux, ewentualnie /lib64 i /usr/lib64 lub samo 32 zamiast), musisz powiedzieć linker szukać w innych katalogach.
W tym celu albo IDE ma inną opcję dla ścieżek wyszukiwania łącznika, albo można je określić w tym samym miejscu, co rzeczywiste biblioteki. Używasz do tego przełącznika -L.

dla ścieżek wyszukiwania, -l dla bibliotek.

Podsumowanie: jeśli chcesz połączyć z libsuperfoo.so który jest w /usr/local/bar/libs, a następnie poprawne opcje łącznikowe są:

-L/usr/local/bar/libs -lsuperfoo 

Jeśli używasz qmake, jedyną rzeczą, którą należy dodać do .pro plik jest (dla powyższego hipotetycznej biblioteki):

LIBS += -L/usr/local/bar/libs -lsuperfoo 
+0

Dzięki za odpowiedź! Osiągnąłem to: LIBS + = -lglut -lGL -lGLU -lGLEW w .pro – arqueum

Powiązane problemy