Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
GLFW on OS X starting guide

OpenGL Development on OS X

While it's possible to download packages and install them manually, it's such a hassle. Fortunately for us, OS X has an unofficial package manager called Let's install it. Open you Terminal and paste the following code:

ruby -e "$(curl -fsSL"

Great. Homebrew will automatically install packages to /usr/local. Conveniently, that directory is already in your include and link paths.

Now, some bad news. Freeglut will not run properly on OS X. It attempts to run through the X-Windows server. Unfortunately for us, X11/XQuartz (the X-Windows emulations on OS X) will not support an OpenGL context past OpenGL 1.3. So we will have to use a newer library, called GLFW. Let's install that now.

In Terminal:

brew install glfw3

GLFW3 should now be installed. Here's a substitute tutorial file with GLFW instead of freeglut.

/* Ask for an OpenGL Core Context */
#include <GLFW/glfw3.h>

#define BUFFER_OFFSET(i) ((char *)NULL + (i))

int main(int argc, char** argv)
  GLFWwindow* window;

  /* Initialize the library */
  if ( !glfwInit() )
     return -1;

#ifdef __APPLE__
  /* We need to explicitly ask for a 3.2 context on OS X */

  /* Create a windowed mode window and its OpenGL context */
  window = glfwCreateWindow( 1280, 720, "Hello World", NULL, NULL );
  if (!window)
     return -1;

  /* Make the window's context current */

  /* Loop until the user closes the window */
  while (!glfwWindowShouldClose(window))
    /* Render here */
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the buffers

    /* Swap front and back buffers */

    /* Poll for and process events */

  return 0;

Now we need to compile this code. GLFW needs to link against several OS X library. Here's the compiler invokation to compile this code sample properly.

clang++ -std=c++11 -stdlib=libc++ -lglfw3 -framework CoreVideo -framework OpenGL -framework IOKit -framework Cocoa -framework Carbon </path/to/cpp/file>

You can run the resulting file by typing ./a.out

Congratulations! You've completed your first OS X OpenGL project.


This comment has been minimized.

Copy link

dineshadepu commented Feb 7, 2018

Thanks for the gist. I have a problem compiling my one code of opening a window.
I get the following message

ld: library not found for -lglfw3 clang: error: linker command failed with exit code 1

How can I solve it?


This comment has been minimized.

Copy link

kuenane commented Feb 16, 2018

I have the same problem too


This comment has been minimized.

Copy link

gooderist commented Mar 24, 2018

try replacing -lglfw3 with -lglfw (you can check if the library is actually installed with ls /usr/local/lib)


This comment has been minimized.

Copy link

qubbit commented Aug 4, 2018

@gooderist That worked. Thanks!


This comment has been minimized.

Copy link

kgcrandn commented Jan 18, 2019

I am so confuse about the flags of clang++. I can't find "-framework" and "-l***" flags in office document of clang.
So what they mean? and what they do?


This comment has been minimized.

Copy link

Abbabon commented Feb 11, 2020

Thank you so much! Still relevant with the Catalina update.

I also support the -lglfw swap with -lglfw3 !


This comment has been minimized.

Copy link
Owner Author

v3n commented Feb 11, 2020

Wow, I'm amazed this still works, but glad you found it helpful!


This comment has been minimized.

Copy link

ritikbhardwaj commented Apr 27, 2020

Thanks man! worked like a charm. I was wondering whether it is still a good practice to use OpenGL on mac platform given that there are other mac specific API's.


This comment has been minimized.

Copy link

umutbalkan commented Aug 1, 2020

I need to remove all of the glfwWindowHint(...) lines in order to actually render something on canvas. Any idea why this happens? I've tried 4.1 as well nothing changed

All of the tutorials I've found also includes the exact same lines. I'm confused

Update found it:
I specified a very old version of GLSL (1.0) in shader definitions. That was the problem

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.