2013-07-20 26 views
9

Ubuntu 13.04(*mesa-common-dev freeglut3-dev*)にOpenGLパッケージをインストールし、サンプルプログラムを実行しようとしました。リンカエラー:シンボル 'glOrtho'への未定義参照

#include "GL/freeglut.h" 
#include "GL/gl.h" 

/* display function - code from: 
    http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html 
This is the actual usage of the OpenGL library. 
The following code is the same for any platform */ 
void renderFunction() 
{ 
    glClearColor(0.0, 0.0, 0.0, 0.0); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(1.0, 1.0, 1.0); 
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); 
    glBegin(GL_POLYGON); 
     glVertex2f(-0.5, -0.5); 
     glVertex2f(-0.5, 0.5); 
     glVertex2f(0.5, 0.5); 
     glVertex2f(0.5, -0.5); 
    glEnd(); 
    glFlush(); 
} 

/* Main method - main entry point of application 
the freeglut library does the window creation work for us, 
regardless of the platform. */ 
int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE); 
    glutInitWindowSize(500,500); 
    glutInitWindowPosition(100,100); 
    glutCreateWindow("OpenGL - First window demo"); 
    glutDisplayFunc(renderFunction); 
    glutMainLoop();  
    return 0; 
} 

ただし、このエラーが発生しました。そのエラーの原因はわかりません。

[email protected]:~/Desktop/p1$ g++ p1.cpp -lglut 
/usr/bin/ld: /tmp/ccgGdeR2.o: undefined reference to symbol 'glOrtho' 
/usr/bin/ld: note: 'glOrtho' is defined in DSO /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 so try adding it to the linker command line 
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1: could not read symbols: Invalid operation 
collect2: error: ld returned 1 exit status 

私は、エラーが似ているよう
OpenGL hello.c fails to build using CMake
を見ていたが、私はCMakeの

を使用していないことは間違って私のコードですか私は/変更/いくつかの設定を微調整を含める必要がありますか?

私はインストールして、コードのためにこのサイトを呼ば:

Setting up an OpenGL development environment in Ubuntu Linux

答えて

21

あなたはOpenGLライブラリをリンクする必要があります。

g++ p1.cpp -lglut -lGL 
+0

私はOpenGLプログラミングの初心者です。プロセスを自動化する方法はありますか、またはすべてのopenglプログラムに対して上記のようにリンカーパラメーターを追加する必要がありますか?私はopenglのための私のシステムを初期化するためのcodeprojectsと同じリンクを参照し、ubuntu 13.04を使っています。 – meteors

+1

Linuxでは、それらに加えて "-lGLU"を追加する必要がありました。 – user1754322

5

あなたはglOrtho()が定義されているOpenGLのlibが、リンクしていません。動作させるには、g++ p1.cpp -lglut -lGLでコンパイル/リンクしてください。ライブラリをリンクする順番に注意してください。これは、ld(g ++で使用されるリンカ)で重要です。 GLUTライブラリはOpenGLに依存していますので、-glutには-lGLが必要です。これは、ldがライブラリを1サイクルだけ循環するため、-lGL -lglutをリンクすると、lglutからlGLへの参照が定義されず、リンクエラーが発生するためです。このような長い答えをおかけして申し訳ありませんが、私はあなたがそれから何かを学ぶことを願っています。

関連する問題