我正在尝试使用Mac上的库GLFW3编译一个相当简单的C ++程序。操作系统是OS 10.9.3(Maverick)。它编译好,直到我尝试使用GLS函数,如glShaderSource等。
以下是我使用的包含文件:
#include <GLFW/glfw3.h>
#include <cstdlib>
#include <cstdio>
我正在使用OpenGL3.2:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
这是编译程序的命令行:
clang++ -o xxxx xxxx.cpp -framework Cocoa -framework OpenGL -Wall -lglfw3 -I/usr/local/include/ -L/usr/local/lib -framework Quartz -framework IOKit
现在错误:
xxxx:38:5: error: no matching function for call to 'glShaderSource'
glShaderSource(vertexShader, 1, &vertexSource, NULL);
我确信我遗漏了一些基本的但是什么?谢谢你的帮助。我担心它与glext有关,但不确定该怎么做。我无法在网络上的Stackoverflow上找到任何内容。
答案 0 :(得分:2)
在OS X上,您需要包含<OpenGL/gl3.h>
以获取GL3 +级别入口点的定义。
在GLFW文档中,在“构建使用GLFX的程序”(http://www.glfw.org/docs/latest/build.html)页面上,有一个名为“GLFW标题选项宏”的部分。相关部分是:
可以在包含GLFW标头之前定义这些宏,并影响标头的行为。
GLFW_INCLUDE_GLCOREARB使标题包含现代GL / glcorearb.h标题(OS X上的OpenGL / gl3.h),而不是常规的OpenGL标题。
所以以下应该可以解决问题:
#define GLFW_INCLUDE_GLCOREARB
#include <GLFW/glfw3.h>
查看glfw3.h
标题(http://www.glfw.org/docs/latest/glfw3_8h_source.html),确认其中包含<OpenGL/gl3.h>
此附加定义。