2017-06-14 48 views
0

我编译并链接了一个简单的OpenGL程序。它是一个C++控制台程序,它打印版本号。它有效,但我不明白它为什么起作用。请你能帮我理解它。为什么我需要FreeGLUT来编译和链接一个GLFW程序

我已经在GLFW和FreeGLUT库中链接了。我认为这些是替代工具包。但是,如果我取出FreeGLUT库,则glGetString不再链接。

他们是替代工具包吗?为什么我需要链接FreeGLUT?我错过了一个我应该链接的库吗?

// GLVersion.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include "glfw3.h" 
#include "glfw3native.h" 
#include "freeglut.h" 
#include "glut.h" 


int main(int argc, char**argv) 
{ 
    const GLubyte *Vstr; 
    glfwInit(); 
    GLFWwindow* mywindow = glfwCreateWindow(800,600,"GLFW",NULL,NULL); 
    glfwMakeContextCurrent(mywindow); 

    Vstr = glGetString(GL_VERSION); 
    fprintf(stderr, "Your OpenGL version is %s\n", Vstr); 

    getchar(); 

    return 0; 
} 

回答

1

glGetString是一个OpenGL函数,而不是GLU函数。要链接它,您必须链接OpenGL32.lib

+0

谢谢。我现在在Visual Studio 2015中有以下链接器数据:glfw3.lib; glfw3dll.lib; opengl32.lib;%(AdditionalDependencies)。上面的例子编译和链接OK(我也需要引入FreeGLUT)? –

+0

如果我添加新的代码行,例如glClearColor,那也可以。如果我添加glShaderSource,它会编译但不会链接该函数或其他类似的函数。我使用了相同的链接库。我错过了一个图书馆吗? –

+0

@FrancisKing你需要为大多数函数使用OpenGL函数加载器。有许多装载机可供选择,如glew,glxw,gl3w或glLoadGen。 – SurvivalMachine

相关问题