Compiling with GLFW3, linker errors 'undefined reference'
c++, glfw, macos, opengl, xcode
Solution
In Mac OS X, glfw3 uses Cocoa (NSGL) for its OpenGL context management. glfw2 used Carbon (CGL/AGL, depending on fullscreen or windowed mode).
NSGL is more robust, but it is built upon an Objective C framework (Cocoa). In order for your software to work correctly with glfw3, you should include the Cocoa framework.
Problem
Having a minimal example using `GLFW3`: ``` #include <GLFW/glfw3.h> int main(int argc, const char * argv[]) { glfwInit(); } ``` ...results in a ton of linker errors: (small excerpt) ``` Undefined symbols for architecture x86_64: "_CFArrayAppendValue", referenced from: _addJoystickElement in libglfw3.a(cocoa_joystick.m.o) "_CFArrayApplyFunction", referenced from: __glfwInitJoysticks in libglfw3.a(cocoa_joystick.m.o) _addJoystickElement in libglfw3.a(cocoa_joystick.m.o) "_CFArrayCreateMutable", referenced from: __glfwInitJoysticks in libglfw3.a(cocoa_joystick.m.o) ... "_objc_msgSend_fixup", referenced from: l_objc_msgSend_fixup_count in libglfw3.a(cocoa_monitor.m.o) l_objc_msgSend_fixup_objectAtIndex_ in libglfw3.a(cocoa_monitor.m.o) l_objc_msgSend_fixup_objectForKey_ in libglfw3.a(cocoa_monitor.m.o) l_objc_msgSend_fixup_alloc in libglfw3.a(cocoa_init.m.o) l_objc_msgSend_fixup_release in libglfw3.a(cocoa_init.m.o) l_objc_msgSend_fixup_alloc in libglfw3.a(nsgl_context.m.o) l_objc_msgSend_fixup_release in libglfw3.a(nsgl_context.m.o) ... ``` `OpenGL.framework` and `libglfw3.a` are both linked. What is the reason for this? Compiling a `glfw2` application before worked like a charm.