C++;在Maverick上使用GLFW3的代码:glShaderSource无匹配函数 我试图用MAC上的库GLFW3编译一个相当简单的C++程序。操作系统是OS10.9.3(特立独行)。在我尝试使用GLSL函数(如glShaderSource等)之前,它编译得很好

C++;在Maverick上使用GLFW3的代码:glShaderSource无匹配函数 我试图用MAC上的库GLFW3编译一个相当简单的C++程序。操作系统是OS10.9.3(特立独行)。在我尝试使用GLSL函数(如glShaderSource等)之前,它编译得很好,c++,macos,opengl,glfw,C++,Macos,Opengl,Glfw,以下是我使用的include文件: #include <GLFW/glfw3.h> #include <cstdlib> #include <cstdio> 以下是编译程序的命令行: clang++ -o xxxx xxxx.cpp -framework Cocoa -framework OpenGL -Wall -lglfw3 -I/usr/local/include/ -L/usr/local/lib -framework Quartz -fram

以下是我使用的include文件:

#include <GLFW/glfw3.h>
#include <cstdlib>
#include <cstdio>
以下是编译程序的命令行:

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有关,但不确定该怎么办。我在web上找不到Stackoverflow上的任何内容。

在OS X上,您需要包含
以获取GL3+级别入口点的定义

在GLFW文档中的“构建使用GLFX的程序”(Building programs that use GLFX)()页面上,有一个名为“GLFW头选项宏”的部分。有关章节包括:

这些宏可能在包含GLFW头之前定义,并影响头的行为

GLFW_INCLUDE_GLCOREARB使标题包含现代的GL/GLCOREARB.h标题(OSX上的OpenGL/gl3.h),而不是常规的OpenGL标题

因此,以下几点应该可以做到:

#define GLFW_INCLUDE_GLCOREARB
#include <GLFW/glfw3.h>
#定义GLFW(包括)GLCOREARB
#包括

查看
glfw3.h
标题()可以确认它将包含
,以及此附加定义。

GLFW不会向您的应用程序公开任何OpenGL函数。为此,您需要像GLEW:@glampert:Mac OS这样的东西,它具有带有必要OpenGL函数定义的头文件。不需要GLEW。我们这里不是在谈论Windows…“我们这里不是在谈论Windows”,我笑着说:PReto的答案是完美的、信息丰富的、完整的,它对我很有用。这就是解决办法。我必须插入标题。再次感谢,Stackoverflow上人们的善良给我留下了深刻的印象,他们愿意分享他们的知识并花时间回答。非常感谢。我看了GLFW3文件,但错过了这一部分。太好了,再次谢谢你。
#define GLFW_INCLUDE_GLCOREARB
#include <GLFW/glfw3.h>