为MacOSX构建glew

为MacOSX构建glew,macos,opengl,glew,Macos,Opengl,Glew,我花了一天时间努力让我的简单引擎在Mac上工作。我有SDL工作,现在唯一的麻烦是opengl。该引擎使用现代opengl(基于着色器),因此需要GLEW。我尝试了从fink到MacPorts的所有方法来安装它,但都没有效果 我所取得的最大成功就是从源头上构建它。首先,我得到一个错误,说“GL/glu.h”找不到这样的文件或目录。所以我将include重命名为OpenGL/glu.h,解决了这个问题。但是现在我得到了这个错误ld:unknown option:-shared我完全被困在这一点上了

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

我所取得的最大成功就是从源头上构建它。首先,我得到一个错误,说“GL/glu.h”找不到这样的文件或目录。所以我将include重命名为
OpenGL/glu.h
,解决了这个问题。但是现在我得到了这个错误
ld:unknown option:-shared
我完全被困在这一点上了

如果有人知道如何做,我宁愿使用静态构建

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


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

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


我已通过以下方式从源代码安装了GLEW:

安装GLEW_DEST=“$HOME/local”OPT=“-march=core2-O2”。所有

您的优化和目标可能会有所不同。这将在
$HOME/local/lib
中生成libGLEW.a、libGLEWmx.a及其对应的动态库。
pkgconfig
子目录还将包括
glew.pc
。格雷夫也不总是和别人玩得很好。必须设置全局变量,如
gleweexperimental
,并且需要注意包含其他标题的顺序:
,等等

如果我能提供一些建议的话-忘记SDL的现代GL编程。如果你想进入OSX上的纯现代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. */
#如果已定义(uuu APPLE_ucc_uuu)
#包括
#否则
#include/*断言OpenGL 3.2核心配置文件可用*/
#恩迪夫
#定义GLFW_INCLUDE_GL3/*不要在旧GL标题中拖动*/
#定义GLFW_NO_GLU/*不要拖入旧的GLU库-除非您必须这样做*/
#包括/*简单易用。省略遗留GL*/
安装GLFW也很容易:

>env PREFIX=“$HOME/local”CFLAGS=“-march=core2-O2”安装可可区

同样,您的设置可能会有所不同


20160412:正如其他人所指出的,我对SDL的评论已经过时。尤其是当你在另一台发动机上工作时。我认为glfw3是在OSX上制作现代OpenGL应用程序的一种更简单的方法。它的代码编写和维护都很好(正确地说!),只关注GL和事件处理。显然,从“引擎”的角度来看,SDL2提供了可移植的扩展视频API、音频API、线程API等。尽管使用C11和C++11,甚至线程API抽象层也可能是冗余的

GLEW的问题在于,如果没有广泛的用户干预,in无法处理多个上下文。这对于OSX来说不是问题,它提供了一个核心概要文件API,不需要加载“函数点”。IIRC,GL on X(DRI?)也有这个-但我可能错了。外面还有其他的装载机。我仍在等待一个命令来控制它们,这可以确保在必要时为多个上下文加载不同的函数指针,并使用线程本地(甚至pthread键)进行正确的调度,这可以从Khronos或其他人的最新gl.xml生成


20180912


我认为目前最简单的方法是使用GLFW来提供上下文,并使用它来解析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
如果您是从命令行进行构建,我建议。

您可以使用来完成以下工作:

brew install glew

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

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

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

上面的答案都没有给出我想要的答案:一种使用静态Glew依赖项快速设置和运行Xcode项目的方法

  • 从这里下载GLEW源代码
  • 类型

    $sudo make install 
    
    从解压目录(如果要动态链接,则安装.dylib)。您需要安装CMake

  • 将.a静态库从/usr/local/lib/复制到您的XCode项目中
  • 更新目标Xcode构建设置中的“头搜索路径”,以包含头(通常放在/usr/local/include中)。或者只是将标题复制到您自己的项目中

  • 我建议使用macports、fink、homebrew等端口系统,因为作者已经完成了将构建过程移植到OSX的工作。在这种情况下,OSX链接器没有绑定