带有Codeblocks编译问题的OpenGL项目

时间:2014-04-23 15:10:32

标签: c opengl gcc codeblocks

我正在使用Codeblocks(在Ubuntu和GCC中)并且已经获得了OpenGL的必要文件,现在我正在阅读有关OpenGL基础知识的教程:

我的(基于教程的)代码:

#include <GL/glu.h>
#include <GL/freeglut.h>

//#include <GL/gl.h>
#include <GL/glut.h>

void display(void)
{
    /* clear window */

     glClear(GL_COLOR_BUFFER_BIT);


    /* draw unit square polygon */

    glBegin(GL_POLYGON);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();

    /* flush GL buffers */

    glFlush();

}


void init()
{

    /* set clear color to black */

    /*  glClearColor (0.0, 0.0, 0.0, 0.0); */
    /* set fill  color to white */

    /*  glColor3f(1.0, 1.0, 1.0); */

    /* set up standard orthogonal view with clipping */
    /* box as cube of side 2 centered at origin */
    /* This is default view and these statement could be removed */

    /* glMatrixMode (GL_PROJECTION);
    glLoadIdentity ();
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);  */
}

int main(int argc, char** argv)
{

    /* Initialize mode and open a window in upper left corner of screen */
    /* Window title is name of program (arg[0]) */

    /* You must call glutInit before any other OpenGL/GLUT calls */
    glutInit(&argc,argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(0,0);
    glutCreateWindow("simple");
    glutDisplayFunc(display);
    init();
    glutMainLoop();

}

当我尝试在Codeblocks中运行它时(在构建设置中设置了GCC),我收到以下错误:

  

错误:对glClear错误的未定义引用:

     

对glBegin的未定义引用...

在尝试了几个小时来更改构建设置后,我决定从命令行调用GCC: gcc -o main main.c -lGL -lGLU -lglut

这个编译没有问题,我甚至可以运行它。所以我不确定问题是什么。 (另外,在Codeblocks中,我确实在构建选项中添加了#34; -lGL -lGLU -lglut&#34;)

为什么命令行GCC可以编译它,但代码块可以&#t; t?

注意:在Codeblocks中,我在构建设置中关闭了所有编译器标志。 链接器设置为空。我添加的唯一内容是上面提到的编译器选项。

1 个答案:

答案 0 :(得分:1)

  

链接器设置为空。我添加的唯一内容是上面提到的编译器选项

这就是问题所在:库链接是链接器设置。那些-l…必须进入链接器设置,而不是编译器设置。另外,在gdi32.lib之前添加opengl32.lib非常重要,这样才能找到所有符号。

在Windows上,OpenGL标题本身依赖于windows.h中定义的宏,因此您应该编写类似

的内容
#ifdef _WIN32
#include <windows.h>
#endif
#include <GL/gl.h>