Reputation: 7388
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.
Upvotes: 8
Views: 10023
Reputation: 486
Upvotes: 29
Reputation: 43369
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.
Upvotes: 13