最成功的方法是从源代码构建它。首先我收到了一个错误消息,说“GL/glu.h”文件或目录不存在。于是我把包含文件的名称改为“OpenGL/glu.h”,问题就解决了。但现在我遇到了这个错误:unknown option: -shared。我完全陷入了困境。
如果有人知道如何进行静态构建,那也行。
brew install glew
main.cpp
中编写您的代码,然后使用clang ++ main.cpp -lGLEW -framework OpenGL -o <EXECUTABLE_FILE>
进行编译(如果您使用其他库,则可以添加-lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo
)。 - Ankit Panda__APPLE__
预处理器宏,仅当该宏未定义时才包含GLEW头文件。对于已定义__APPLE__
的情况,定义(空)宏将glew…
函数调用转换为无操作。 - datenwolfOpenGL/GL.h
,无需额外的工作。这样做的好处是,不必处理函数指针加载。缺点是,所使用的OpenGL版本立即对您的程序所需的MacOS X版本设置了硬性最低要求。 - datenwolf更新20180912 - 不要使用GLEW。这真的不值得麻烦...
我已经使用以下方式从源代码安装了GLEW:
make GLEW_DEST="$HOME/local" OPT="-march=core2 -O2" install.all
您的优化和目标可能有所不同。这将在$HOME/local/lib
中产生libGLEW.a、libGLEWmx.a及其dylib对应项。子目录pkgconfig
还将包括glew.pc
。GLEW并不总是与其他软件兼容。需要设置全局变量,例如glewExperimental
,以及需要小心处理其他头文件的包含顺序:<OpenGL/gl3.h>
或<glfw.h>
等。
如果我可以提供一些建议-忘记SDL,转而考虑像下面这样的东西,以进行纯净的、现代的OS X GL编程:
#if defined (__APPLE_CC__)
#include <OpenGL/gl3.h>
#else
#include <GL/gl3.h> /* assert OpenGL 3.2 core profile available. */
#endif
#define GLFW_INCLUDE_GL3 /* don't drag in legacy GL headers. */
#define GLFW_NO_GLU /* don't drag in the old GLU lib - unless you must. */
#include <GL/glfw.h> /* simple and easy to use. omit legacy GL. */
安装GLFW也很容易:
> env PREFIX="$HOME/local" CFLAGS="-march=core2 -O2" make cocoa cocoa-dist-install
同样,你的设置可能有所不同。
20160412: 我对SDL的评论已经过时,正如其他人所指出的那样。特别是如果你正在开发另一个引擎的话。我认为glfw3是在OSX上制作现代OpenGL应用程序的更简单方法。它非常优秀且代码维护得很好,专注于GL和事件处理。显然,从“引擎”的角度来看,SDL2提供了可移植的扩展视频API、音频API、线程API等。但是,随着C11和C++11的出现,即使是线程API抽象层也可能是多余的。
GLEW存在问题,因为它无法处理多个上下文而需要用户进行大量干预。这对于OSX来说不是问题,因为它提供了核心配置文件API,不需要加载“函数点”。我IRC,X(DRI?)上的GL也有这个功能,但我可能是错的。还有其他的加载器。我仍然在等待一个能够统治它们所有的加载器,它可以确保为多个上下文加载不同的函数指针,并使用线程本地存储(甚至是pthread key)进行正确的分派,可以从Khronos或其他人的最新gl.xml生成...
20180912
我认为目前最简单的方法是使用GLFW来提供上下文,并使用GLAD来解析GL函数指针。唯一的缺点是没有有效地管理多个GL上下文。这是GLFW在其演示中目前正在使用的... 我会完全忘记GLEW。
MacPorts可以为您安装这些库及其依赖项:
sudo port install glew +universal
sudo port install libsdl +universal
在构建游戏时,最好使用g++进行构建和链接步骤; 您只需要引用/opt/local,就可以找到由MacPorts安装的头文件和库。 如果需要,您还可以静态链接.a文件:
g++ -c -O3 -I/opt/local/include main.cpp -o main.o
g++ main.o /opt/local/lib/libSDL.a /opt/local/lib/libSDLmain.a /opt/local/lib/libGLEW.a -o mygame
以上答案都没有给我我所需要的:快速设置带有静态Glew依赖项的Xcode项目的方法。
$sudo make install
(这将安装.dylib,如果您想链接动态位于lib/
)。您需要安装CMake才能运行上述命令。如果尚未安装,则可以使用以下方式进行安装
brew install cmake
#include <GL/glew.h>
依赖项的相应程序文件(例如commons.h),并将其更改为:#include <path/to/file/that/you/just/copied/glew.h>
然后,尝试重新编译您的程序,这次您不应该收到任何GLEW错误。
也许你可以尝试这个命令 brew install --build-from-source glew
。
sudo port install glew
给出了什么错误? - mmmmmm