OpenGL程序用C编译但不用C ++编译

时间:2014-11-13 17:55:45

标签: opengl sdl sdl-2

我正在学习OpenGL并且正在使用SDL2。我面临的问题是我编写的代码不能用C ++编译,但是相同的代码似乎在C中编译得很好。我创建了一个小程序here的摘录。

当我使用gcc编译此代码时,它编译并运行正常

$ gcc -o testgl testgl.c `pkg-config --cflags --libs sdl2 gl`
$ ./test 
OpenGL version : 4.4.0 NVIDIA 340.58

但是当我用g ++编译相同的代码时

$ g++ -o testgl testgl.c `pkg-config --cflags --libs sdl2 gl`
test.c: In function ‘int main()’:
test.c:14:27: error: ‘glGenVertexArrays’ was not declared in this scope
  glGenVertexArrays(1, &vao);
                           ^
test.c:15:23: error: ‘glBindVertexArray’ was not declared in this scope
  glBindVertexArray(vao);
                       ^

虽然这并不是一个问题,因为我可以简单地使用C代替C ++,但我想知道为什么会发生这样的事情以及是否有办法解决这个问题?

环境:Ubuntu 14.04,GCC 4.8,SDL 2

1 个答案:

答案 0 :(得分:2)

这可能是因为C不需要函数原型,而C ++则需要。

在C中进行编译,您最终会链接到libGL中的定义并且可以正常工作。从技术上讲,您不需要这些功能的标题。用C ++编译,你缺少提供函数原型的头文件。您可以使用GLEW,或者您可以使用特定于操作系统的API(例如wgl,glx)自行加载GL功能。