2012-02-26 57 views
9

私はhereと同じエラーがあります。そこに解決策はありませんし、私はもっと明確にそれを説明しようとしているので、誰かが解決策を持っていることを願っています。また、私はthis質問への答えからすべてをインストールしました。Qtエラー:未定義の 'gluOrtho2D'への参照

友人がQT(linux)で行ったプログラムをコンパイルしようとしています。私はWindows上でそれを試してみましたが、正常に動作します。問題は、Ubuntu 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がインクルードされています。
  • QT + = openglのは、それがUbuntuの11.10の問題だ場合、私は知らない.PRO

に置かれています。私はそれがおそらくそれを修正した "binutils-gold"をダウンロードしたにもかかわらず、リンカにいくつかの問題があることを読んだ。また、プロジェクトの.pro-> Addライブラリを右クリックして手動でライブラリを追加しようとしましたが、 "/ 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のドキュメントを読みますどのようにそれらをリンカオプションに追加するのでしょうか?多くの場合、プロジェクト設定の適切な領域にそのように入力することができます。

これらのライブラリは、(代わりに32と同じ可能性/lib64/usr/lib64/lib Linux上/usr/lib、または)あなたのマシン上で通常のライブラリパスにない場合は、他のディレクトリで探すようにリンカに指示する必要があります。
このため、IDEにリンカー検索パスの別のオプションがあります。または、実際のライブラリと同じ場所に指定することもできます。そのためには-Lスイッチを使用します。

-L検索パスの場合は、-lライブラリです。

要約:あなたが/usr/local/bar/libsであるlibsuperfoo.soにリンクしたい場合は、正しいリンカオプションは次のとおりです。

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

あなたがqmake、あなたが追加する必要がある唯一のものを使用している場合.proファイルには、(上記の仮想的なライブラリのため)である:ヘッダが含まれているかどうかにかかわらず

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

答えをありがとう!私はそれを達成しました:LIBS + = -lglut -lGL -lGLU -lGLEW .pro – arqueum

関連する問題