在64x模式下编译OpenGL时出错

时间:2012-10-09 13:45:42

标签: opengl

我刚刚安装了OpenGL库(实际上已经在我的计算机上完成了大部分源代码),我尝试编译第一个程序。

对于x86运行完美,但对于我配置和重定向glut32.lib的x64

  

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Lib

  

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Lib \ x64

错误发生如下,我不知道解决这个问题。错误似乎我没有正确链接库?

error LNK2019: unresolved external symbol __imp_glutSwapBuffers referenced in function "void __cdecl drawcube(void)" (?drawcube@@YAXXZ)
error LNK2019: unresolved external symbol __imp_glutMainLoop referenced in function main
error LNK2019: unresolved external symbol __imp_glutIdleFunc referenced in function main
error LNK2019: unresolved external symbol __imp_glutDisplayFunc referenced in function main

我的测试代码是这样的

<!-- language: cpp -->
void drawcube(void)
{

    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    glRotatef(angle, 0.0, 1.0, 0.0);
    glBegin(GL_LINE_LOOP);
    glVertex3iv(a);
    glVertex3iv(b);
    glVertex3iv(c);
    glVertex3iv(d);
    glEnd();
    glFlush();
    glutSwapBuffers();
}

<!-- language: cpp -->
int main(int argc, char **argv)
{

    glutInit(&argc, argv);
    glutInitWindowSize(800, 600);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutCreateWindow("Test OpenGL");
    glutDisplayFunc(drawcube);
    glutIdleFunc(drawcube);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-30.0, 30.0, -30.0, 30.0, -30.0, 30.0);
    glRotatef(30.0, 1.0, 0.0, 0.0);
    glMatrixMode(GL_MODELVIEW);
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glutMainLoop();

    return(0);
}

来自@datenwolf的回答很有用。

我只是更改为使用freegult而没有错误,因为在x64中已经编译。

2 个答案:

答案 0 :(得分:2)

  

我刚刚安装了OpenGL库(实际上已经在我的计算机中完成了大部分源代码),我尝试编写第一个程序。

咦?你的意思是你安装了一个OpenGL可能的驱动程序(即从GPU制造商的网站下载驱动程序,而不是使用Windows附带的残缺驱动程序)? OpenGL通常不是以库的形式出现的。它是一种规范,通常以驱动程序的形式存在。此外,您不需要特殊的“OpenGL SDK”,因为所有编译器都附带编译OpenGL程序所需的所有内容。无论你安装什么,你可能都不需要它,它就像弊大于利。

error LNK2019: unresolved external symbol __imp_glutSwapBuffers referenced in function "void __cdecl drawcube(void)" (?drawcube@@YAXXZ)

嗯,那不是OpenGL,那是GLUT。而GLUT不是OpenGL的一部分。它是第三方框架库,用于创建小而简单的OpenGL演示。 你实际上必须单独安装在你的系统上。我建议使用FreeGLUT(或根本不使用GLUT)。与OpenGL不同,在32位和64位架构上,DLL被称为opengl32.dll,您需要特定于架构的GLUT版本才能正确编译。旧的GLUT没有维护,因此没有64位版本。因此我建议使用FreeGLUT。

答案 1 :(得分:0)

我做了一个简单的步骤,它适合我 1)项目属性 2)将配置设置为ALL CONFIGURATION设置 3)将PLATFORM设置为ALL PLATFORM  添加然后添加库,包含头文件。  如果不起作用,则从主项目窗口更改配置和平台 防爆。调试/发布和x64 / x86无论.. 它会起作用