我正在学习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
答案 0 :(得分:2)
这可能是因为C不需要函数原型,而C ++则需要。
在C中进行编译,您最终会链接到libGL中的定义并且可以正常工作。从技术上讲,您不需要这些功能的标题。用C ++编译,你缺少提供函数原型的头文件。您可以使用GLEW,或者您可以使用特定于操作系统的API(例如wgl,glx)自行加载GL功能。