使用GLFW3进行编译,链接器错误'未定义引用'

App*_*ell 4 c++ opengl macos xcode glfw

有一个最小的例子使用GLFW3:

#include <GLFW/glfw3.h>

int main(int argc, const char * argv[]) {
    glfwInit();
}
Run Code Online (Sandbox Code Playgroud)

...导致大量链接器错误:(小摘录)

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)
  ...
Run Code Online (Sandbox Code Playgroud)

OpenGL.framework并且libglfw3.a都是相互关联的.

在此输入图像描述

这是什么原因?glfw2在像魅力一样工作之前编译应用程序.

Val*_*iuk 24

如果您使用的是GLFW的静态库版本,请将它和Cocoa,OpenGL,IOKitCoreVideo框架作为依赖项添加到项目中.

  • 谢谢.仅供参考,我将在我的系统上发布命令行:`gcc -Iglfw3/include/-Lglfw3/lib/-lglfw3 -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo main.c` . (3认同)
  • 目前,这是完整的答案.谢谢. (2认同)

And*_*man 11

在Mac OS X中,glfw3使用Cocoa(NSGL)进行OpenGL上下文管理.glfw2使用Carbon(CGL/AGL,取决于全屏或窗口模式).

NSGL更强大,但它建立在Objective C框架(Cocoa)之上.为了使您的软件能够与glfw3一起正常工作,您应该包含Cocoa框架.