为Mac OSX构建glew

问题描述 投票:15回答:6

我花了一天时间努力让我的简单引擎在Mac上运行。我有SDL工作,现在唯一给麻烦的是opengl。该引擎使用现代opengl(基于着色器),因此需要GLEW。我已经尝试了从fink到MacPorts的所有东西来安装它,但没有任何作用。

我所获得的最大成功是从源头构建它。首先我得到一个错误说'GL/glu.h' no such file or directory found.所以我将包括重命名为OpenGL/glu.h并解决了这个问题。但现在我得到这个错误ld: unknown option: -shared我完全陷入了这一点。

如果有人知道如何做,那也是静态构建。

macos opengl glew
6个回答
12
投票

该引擎使用现代opengl(基于着色器),因此需要GLEW

GLEW不是使用现代OpenGL功能的先决条件。这是一种加载扩展功能的方法,而不是唯一的方法。你在MacOS X上,所以扩展系统对你来说没用,因为支持的OpenGL版本完全取决于操作系统和可用的框架。 Apple自己开发OpenGL驱动程序,它们提供的扩展只是那些用于OpenGL规范中没有的功能(即特定于供应商和EXT)的扩展。您所需要的只是一个足够新的OpenGL框架版本。 2006年之后发布的任何MacOS X都可以实现。


27
投票

您可以使用Homebrew为您完成工作:

brew install glew

5
投票

更新20180912 - 不要使用GLEW。这不值得麻烦......


我使用源代码安装了GLEW:

make GLEW_DEST =“$ HOME / local”OPT =“ - march = core2 -O2”install.all

您的优化和目的地可能会有所不同。这会产生一个libGLEW.a,libGLEWmx.a,以及它们在$HOME/local/lib中的dylib对应物。 pkgconfig子目录还将包括glew.pc。 GLEW并不总能与其他人合作。必须设置像glewExperimental这样的全局变量,以及需要注意包含其他标题的顺序:<OpenGL/gl3.h><glfw.h>等。

如果我可以提供一些建议 - 忘记现代GL编程的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来说,这不是问题,OSX提供核心配置文件API,不需要加载“功能点”。 IIRC,GL on X(DRI?)也有这个 - 但我可能错了。还有其他装载机。我还在等待一个人来统治它们,这可以确保在必要时为多个上下文加载不同的函数指针,并使用线程本地(甚至是pthread键)进行正确的调度,这可以从最新的gl生成来自Khronos的.xml,或者......


20180912

我认为现在最简单的方法是使用GLFW来提供上下文,并使用GLAD来解析GL函数指针。唯一的缺点是没有有效管理多个GL上下文。这就是GLFW目前在其演示中使用的......我现在完全忘记了GLEW。


4
投票

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

如果你是从命令行构建的,我推荐using a Makefile and building with make


2
投票

我建议去http://glew.sourceforge.net并将ZIP文件直接下载到你的Mac上。然后进入Finder并键入glew.h以查看文件,控制单击它,获取信息,并将路径复制到该文件。然后进入包含#include <GL/glew.h>依赖项的相应程序文件(例如,commons.h),并将其更改为:

#include <path/to/file/that/you/just/copied/glew.h>  

然后,尝试再次编译您的程序,这次您不应该得到任何GLEW错误。


1
投票

上面的答案都没有给我我想要的东西:一个快速的方法来设置和Xcode项目与静态Glew依赖。

  1. 从这里下载GLEW源http://glew.sourceforge.net/
  2. 类型 $sudo make install 从解压缩的目录(如果你想动态链接,这将安装.dylib)。您需要安装CMake。
  3. 将.a静态库从/ usr / local / lib /复制到XCode项目
  4. 更新目标的Xcode构建设置中的“标题搜索路径”以包含标题(通常放在/ usr / local / include中)。或者只是将标题复制到您自己的项目中。
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.