2012-04-26 29 views
0

コンパイラにコンパイルするようコンパイラに指示するとコンパイルされるのでコンパイルされますが、デフォルトに設定するとコンパイルされません(コンパイルはC++としてコンパイルされるため)。私がC++としてコンパイルすると、glClearへの未定義参照の行に沿って数多くのエラーが発生します。私のopenglフリーglutアプリケーションはCとしてコンパイルされますが、C++ではコンパイルされません。

私はMicrosoftのVisual Studio C++コンパイラを使用しています。私はすべてが適切につながっている。

コードは次のとおりです。

また
#include <GL/glut.h> 
#include <GL/freeglut.h> 
#include <GL/gl.h> 



void display(void) 
{ 
    /* Clear all pixels */ 
    glClear(GL_COLOR_BUFFER_BIT); 

    /* draw white polygon (rectangle) with 
    * corners at (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0) 
    */ 

    glColor3f(1.0, 1.0, 1.0); 
    glBegin(GL_POLYGON); 
     glVertex3f(0.25, 0.25, 0.0); 
     glVertex3f(0.75, 0.25, 0.0); 
     glVertex3f(0.75, 0.75, 0.0); 
     glVertex3f(0.25, 0.75, 0.0); 
    glEnd(); 

    /* don't wait! 
    * start processing buffered OpenGL routines 
    */ 

     glFlush(); 
} 

void init(void) 
{ 
    /* Select clearing background color */ 
    glClearColor(0.0, 0.0, 0.0, 0.0); 

    /* Initialize viewing values */ 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
} 


/* 
* Declare initial window size, position, and display mode 
* (single buffer and RGBA). Open window with “hello” 
* in its title bar. Call initialization routines. 
* Register callback function to display graphics. 
* Enter main loop and process events. 
*/ 
int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(250, 250); 
    glutInitWindowPosition(100, 100); 
    glutCreateWindow("hello"); 
    init(); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; /* ISO C requires main to return int. */ 
} 

、誰もがC++とOpenGLを学習するための適切なリソースを持っている場合、あなたはそれをお勧めしてくださいだろうか?

+0

正確なエラーは何ですか?コンパイルエラーかリンクエラーですか? – Cameron

+0

gl への未定義の参照私はC言語でコンパイルするとうまくリンクされていることを知っています。 –

+5

*未定義の参照*はリンカーエラーです。あなたはopengl32.libを含んでいますか? –

答えて

2

glClearは現在含まれているヘッダーファイルでは宣言されていない可能性があります。 Cでは、宣言されていない関数は、引数に基づいて特定の型を持ち、intを返すとしばしば仮定されます。だから、Cでコンパイルすると、宣言されていないという警告が出るかもしれません(コンパイル時に警告を有効にしておき、コンパイル時にそれらを読むことをお勧めします)が、コンパイルとリンクには最善を尽くします。

C++は宣言されていない関数についてより厳密です。

1

Alexandre JasminとBartが指摘しているように、OpenGLライブラリを正しくリンクしていることを確認してください。私は

-lGLU -lGL -lglut
をubuntuでfreeglutと使用しています。

問題が解決しない場合は、

#define GLUT_DISABLE_ATEXIT_HACK
をcppファイルの上部に追加してみてください。

関連する問題