2012-04-26 54 views
0

这不是代码问题,因为它编译时我告诉编译器将它编译为C,但是当我将设置设置为默认(即将其编译为C++)时,它不会编译。当我将它编译为C++时,我得到了许多错误,这些错误沿着“未定义的glClear引用”行。我正在使用Microsoft的Visual Studio C++编译器。我有一切正确的链接。为什么我的opengl freeglut应用程序编译为C而不是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. */ 
} 

此外,如果任何人有学习的OpenGL使用C++,你可以请推荐一下合适的资源?

+0

什么是确切的错误?它是编译错误还是链接错误? – Cameron 2012-04-26 03:23:58

+0

我得到一个错误,说, 未定义的引用gl 我知道我有一切正确的链接,因为当我编译它在C它的作品 – 2012-04-26 03:28:30

+5

*未定义的引用*是一个链接器错误。你包括opengl32.lib? – 2012-04-26 03:28:44

回答

2

很可能是因为glClear没有在当前包含的任何头文件中声明。在C语言中,未声明的函数经常被假定为基于它的参数具有某种类型,并返回一个int。所以当用C编译时,你可能会得到一个关于它未声明的警告(我希望你已经启用了警告,并且在编译时阅读它们),但是它会尽力编译和链接它。

C++对未声明的函数更严格。

1

正如Alexadre Jasmin和Bart指出的那样,请验证您是否正确链接了OpenGL库。我在Ubuntu上使用freeglut使用

-lGLU -lGL -lglut

如果这样不能解决问题,请尝试在cpp文件的顶部添加

#define GLUT_DISABLE_ATEXIT_HACK

相关问题