2012-02-26 3 views
9

here과 같은 오류가 있습니다. 거기에 해결책이 없으며 누군가가 해결책을 가지고 있기를 바랍니다. 또한 this 질문에 대한 답변부터 모든 것을 설치했습니다.Qt 오류 : 'gluOrtho2D'에 대한 정의되지 않은 참조

친구가 QT (Linux)에서 수행 한 프로그램을 컴파일하려고합니다. 나는 Windows에서 그것을 tryed하고 잘 실행됩니다, 문제는 내가 우분투 11.10에서 실행할 수 없다는 것입니다.

이 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 및 gl.h은 #include하는있다.
  • QT + = OpenGL을가 .PRO

는 우분투 11.10의 문제가 있는지 모르겠어요에 배치됩니다. 나는 그것이 "bugutils-gold"를 다운로드했지만 링커에 문제가 있다고 읽었습니다. 또한 나는 '.pro-> Add Librarys'프로젝트를 마우스 오른쪽 버튼으로 클릭하여 수동으로 라이브러리를 추가하려고 시도했지만 "/ usr/include/GL"에 아무 것도 추가하지 않을 것입니다.

마지막으로, 여기에 전체 컴파일 출력입니다 : 당신은 링커 옵션에 관련 라이브러리를 추가 할 필요가


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

여기에 관련이없는 - 당신은하지 컴파일러 오류 링커 오류가 있습니다. 이 문제를 해결하려면 glu 라이브러리에 올바르게 연결되어 있는지 확인해야합니다. –

+0

gl에 -lGL하지만 glu가 아닌 것처럼 보입니다. -lGLU를 추가하여 도움이되는지 확인하십시오. –

+0

[gluOrtho2D]에 대한 정의되지 않은 참조의 복제본 (http://stackoverflow.com/questions/9326380/undefined-reference-to-gluortho2d) –

답변

9

.

라이브러리에는 -l 옵션 (소문자 L)이 추가됩니다. 경로는 아니지만 코드가 포함 된 실제 파일입니다. Linux의 경우 해당 파일의 파일 확장자는 .so*입니다. Windows의 경우 해당 파일은 .dll입니다. 확장은 다른 플랫폼에 따라 다릅니다. 당신이 다음 라이브러리 필요한 상태 링크의 질문

하나 : (. gluOrtho2D libGLU 실제로,하지만 당신이없는 다른 수 있습니다)

-lglut -lGL -lGLU -lGLEW 

확인하려면 IDE의 문서를 읽기 어떻게 링커 옵션에 링커 옵션을 추가해야하는지 알려주지 만, 많은 경우 프로젝트 설정의 오른쪽 영역에있는 것과 같이 입력 할 수 있습니다. 이러한 라이브러리는 컴퓨터 (/lib, 리눅스, 아마도 /lib64/usr/lib64, 또는 대신 32와 같은에 /usr/lib)에 보통 라이브러리 경로에없는 경우

, 당신은 다른 디렉토리에보고 링커에게해야합니다.
IDE에는 링커 검색 경로에 대한 다른 옵션이 있거나 실제 라이브러리와 동일한 위치에 지정할 수 있습니다. 이를 위해 -L 스위치를 사용합니다.

-L 검색 경로 용, 라이브러리 용 -l.

요점을 되풀이하다 : 당신이 /usr/local/bar/libslibsuperfoo.so와 연결하려는 경우, 다음 올바른 링커 옵션은 다음과 같습니다

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

당신이 qmake를 사용하는 경우는, 유일한 것은 당신이에 추가 할 필요가 .pro 파일 (위의 가상 라이브러리)입니다 : 헤더가 포함되어 있는지 여부

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

답변 해 주셔서 감사합니다! 나는 퍼팅을 달성했다. LIBS + = -lglut -lGL -lGLU -lGLEW .pro – arqueum

관련 문제