主要参考文章:
FreeGLUT doesn’t have any prebuild frameworks we can use with the OS X compilers. Fortunately, Mac OS X is a type of Unix and we can use unix commands to get it to build and install freeGLUT on OS X. Unfortunatey, OS X has some quirks we need to deal with.The first issue is that newer versions of OS X don’t have X11. You’ll have to installXQuartz, a quartz based port of X.org. Download the dmg and install it.Download the latest source from thefreeGLUT website.
Extract the archive, open a terminal window, cd to the extracted folder.Configure the installation using this command in the extracted folderenv CPPFLAGS="-I/opt/X11/include" LDFLAGS="-L/opt/X11/lib" ./configureWhen you installed XQuartz, it installs X11 to /opt/X11/lib. This command configures the build and tells it to look in /opt/X11/include for headers and /opt/X11/lib for library files.In freeGLUT 2.8.0 there’s a bug in the source code that causes to break in OS X. In the freeGLUT source directory you extracted go to progs -> demos -> smooth_opengl3 and open up smooth_openg13.c.Between lines 101 and 102 there’s a bunch type definitions that are already in glext.h that cause a conflict.
typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);typedef void (APIENTRY *PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);typedef void (APIENTRY *PFNGLBUFFERDATAPROC) (GLenum target, ourGLsizeiptr size, const GLvoid *data, GLenum usage);typedef GLuint (APIENTRY *PFNGLCREATESHADERPROC) (GLenum type);typedef void (APIENTRY *PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const ourGLchar **string, const GLint *length);typedef void (APIENTRY *PFNGLCOMPILESHADERPROC) (GLuint shader);typedef GLuint (APIENTRY *PFNGLCREATEPROGRAMPROC) (void);typedef void (APIENTRY *PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);typedef void (APIENTRY *PFNGLLINKPROGRAMPROC) (GLuint program);typedef void (APIENTRY *PFNGLUSEPROGRAMPROC) (GLuint program);typedef void (APIENTRY *PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);typedef void (APIENTRY *PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog);typedef void (APIENTRY *PFNGLGETPROGRAMIVPROC) (GLenum target, GLenum pname, GLint *params);typedef void (APIENTRY *PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog);typedef GLint (APIENTRY *PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const ourGLchar *name);typedef void (APIENTRY *PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);typedef void (APIENTRY *PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);typedef GLint (APIENTRY *PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const ourGLchar *name);typedef void (APIENTRY *PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
All you have to do is sandwich it in some ifdef macros to make it stop complaining.
#ifndef __glext_h_typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);typedef void (APIENTRY *PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);typedef void (APIENTRY *PFNGLBUFFERDATAPROC) (GLenum target, ourGLsizeiptr size, const GLvoid *data, GLenum usage);typedef GLuint (APIENTRY *PFNGLCREATESHADERPROC) (GLenum type);typedef void (APIENTRY *PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const ourGLchar **string, const GLint *length);typedef void (APIENTRY *PFNGLCOMPILESHADERPROC) (GLuint shader);typedef GLuint (APIENTRY *PFNGLCREATEPROGRAMPROC) (void);typedef void (APIENTRY *PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);typedef void (APIENTRY *PFNGLLINKPROGRAMPROC) (GLuint program);typedef void (APIENTRY *PFNGLUSEPROGRAMPROC) (GLuint program);typedef void (APIENTRY *PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);typedef void (APIENTRY *PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog);typedef void (APIENTRY *PFNGLGETPROGRAMIVPROC) (GLenum target, GLenum pname, GLint *params);typedef void (APIENTRY *PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, ourGLchar *infoLog);typedef GLint (APIENTRY *PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const ourGLchar *name);typedef void (APIENTRY *PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);typedef void (APIENTRY *PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);typedef GLint (APIENTRY *PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const ourGLchar *name);typedef void (APIENTRY *PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);#endif
Then in the terminal enter the make command (make sure the terminal is in the directory you extracted)make allNow using root privileges, install the library with the command:sudo make installNow that you’ve installed the development libraries, it’s time to start up your IDE/compiler.
make all 出现错误:
PFNGLGENBUFFERSPROC gl_GenBuffers;
^
PFNGLBINDBUFFERPROC gl_BindBuffer;
^
PFNGLBUFFERDATAPROC gl_BufferData;
^
PFNGLCREATESHADERPROC gl_CreateShader;
^
PFNGLSHADERSOURCEPROC gl_ShaderSource;
^
PFNGLCOMPILESHADERPROC gl_CompileShader;
^
PFNGLCREATEPROGRAMPROC gl_CreateProgram;
^
PFNGLATTACHSHADERPROC gl_AttachShader;
^
PFNGLLINKPROGRAMPROC gl_LinkProgram;
^
PFNGLUSEPROGRAMPROC gl_UseProgram;
^
PFNGLGETSHADERIVPROC gl_GetShaderiv;
^
PFNGLGETSHADERINFOLOGPROC gl_GetShaderInfoLog;
^
PFNGLGETPROGRAMIVPROC gl_GetProgramiv;
^
PFNGLGETPROGRAMINFOLOGPROC gl_GetProgramInfoLog;
^
PFNGLGETATTRIBLOCATIONPROC gl_GetAttribLocation;
^
PFNGLVERTEXATTRIBPOINTERPROC gl_VertexAttribPointer;
^
‘PFNGLENABLEVERTEXATTRIBARRAYPROC’
PFNGLENABLEVERTEXATTRIBARRAYPROC gl_EnableVertexAttribArray;
^
PFNGLGETUNIFORMLOCATIONPROC gl_GetUniformLocation;
^
PFNGLUNIFORMMATRIX4FVPROC gl_UniformMatrix4fv;
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[4]: *** [smooth_opengl3-smooth_opengl3.o] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
有问题,于是把修改的宏去掉。重新make all。没有报错。make install.
再参考:
Start up XCode and create a command line tool project.以后我会去到很多很繁华或苍凉,