C++ 使用GLFW3编译,链接器错误';未定义的引用';

C++ 使用GLFW3编译,链接器错误';未定义的引用';,c++,xcode,macos,opengl,glfw,C++,Xcode,Macos,Opengl,Glfw,使用GLFW3的最小示例: #include <GLFW/glfw3.h> int main(int argc, const char * argv[]) { glfwInit(); } OpenGL.framework和libglfw3.a都是链接的 这是什么原因?在编译glfw2应用程序之前,它的工作非常出色。在Mac OS X中,glfw3使用Cocoa(NSGL)进行OpenGL上下文管理。glfw2使用碳纤维(CGL/AGL,取决于全屏或窗口模式) NSGL更

使用
GLFW3
的最小示例:

#include <GLFW/glfw3.h>

int main(int argc, const char * argv[]) {
    glfwInit();
}
OpenGL.framework
libglfw3.a
都是链接的


这是什么原因?在编译
glfw2
应用程序之前,它的工作非常出色。

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


NSGL更加健壮,但它是建立在Objective C框架(Cocoa)之上的。为了使您的软件能够正确使用glfw3,您应该包括Cocoa框架。

glfw3可能在其渲染上下文/窗口管理界面中从Carbon(C)切换到Cocoa(Objective C)。在每个版本的OS X中,通过Carbon接口公开的核心OS功能越来越少,如果编写64位基于Carbon的应用程序,情况会变得更糟。尝试将Cocoa框架添加到构建配置中。您是否以某种方式解决了问题?@FrancescoBoi我必须链接到
IOKit
CoreVideo
Cocoa
框架。看看这个问题的答案。嘿,谢谢你的回答,这就成功了。除了
Cocoa
框架之外,还需要
IOKit
框架。我也遇到了这个问题,除了
Cocoa
IOKit
之外,我还必须添加
CoreVideo
工具包,然后它就可以为我工作了。@TrevorPeyton:啊,我明白了。当我最初写这个答案的时候,只是为了解释原始问题中未解决的符号。似乎GLFW3引入的依赖项比我最初想象的要多。目前,这是完整的答案。谢谢,谢谢。仅供参考,我将发布刚刚在我的系统上实现此技巧的命令行:
gcc-Iglfw3/include/-Lglfw3/lib/-Lglfw3-framework OpenGL-framework Cocoa-framework IOKit-framework CoreVideo main.c
,我只需要-l glfw3,这就解决了它。在关键点中,如果有人对使用感兴趣,我添加了除了OpenGL之外的所有建议(因为我正在构建w Vulkan),它工作了。
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)
  ...