在OSX中连接GLFW时遇到的问题

3

当我通过链接器运行我的C++ OpenGL程序时,我遇到了大量的链接错误(如下所示)。我没有问题编译不依赖GLFW的OpenGL程序。因为我在Mac上很少进行C++/ObjC开发,所以我不太确定该怎么做--有什么建议吗?谢谢!

正在运行的命令是:

g++ -framework Carbon -framework OpenGL -framework GLUT -lglfw -framework AGL -arch i386 display.o voxels.o -o cubile

错误信息为:
Undefined symbols for architecture i386:
  "_objc_msgSend", referenced from:
      __glfwPlatformOpenWindow in libglfw.a(cocoa_window.o)
      -[GLFWContentView mouseDragged:] in libglfw.a(cocoa_window.o)
      -[GLFWContentView rightMouseDragged:] in libglfw.a(cocoa_window.o)
      -[GLFWContentView otherMouseDragged:] in libglfw.a(cocoa_window.o)
      __glfwPlatformPollEvents in libglfw.a(cocoa_window.o)
      __glfwPlatformWaitEvents in libglfw.a(cocoa_window.o)
      __glfwPlatformRefreshWindowParams in libglfw.a(cocoa_window.o)
      ...
  "_objc_msgSend_stret", referenced from:
      -[GLFWWindowDelegate windowDidResize:] in libglfw.a(cocoa_window.o)
      __glfwPlatformSetWindowPos in libglfw.a(cocoa_window.o)
      -[GLFWContentView mouseMoved:] in libglfw.a(cocoa_window.o)
  "_objc_msgSend_fpret", referenced from:
      -[GLFWContentView mouseMoved:] in libglfw.a(cocoa_window.o)
      -[GLFWContentView scrollWheel:] in libglfw.a(cocoa_window.o)
      __glfwPlatformGetTime in libglfw.a(cocoa_time.o)
      __glfwPlatformSetTime in libglfw.a(cocoa_time.o)
  "_objc_msgSendSuper", referenced from:
      -[GLFWContentView keyDown:] in libglfw.a(cocoa_window.o)
      -[GLFWApplication sendEvent:] in libglfw.a(cocoa_init.o)
  "_NSApp", referenced from:
      __glfwPlatformOpenWindow in libglfw.a(cocoa_window.o)
      __glfwPlatformPollEvents in libglfw.a(cocoa_window.o)
      __glfwPlatformWaitEvents in libglfw.a(cocoa_window.o)
      __glfwPlatformCloseWindow in libglfw.a(cocoa_window.o)
      __glfwPlatformInit in libglfw.a(cocoa_init.o)
      __glfwPlatformOpenWindow in libglfw.a(cocoa_window.o)
      __glfwPlatformPollEvents in libglfw.a(cocoa_window.o)
      __glfwPlatformWaitEvents in libglfw.a(cocoa_window.o)
      __glfwPlatformCloseWindow in libglfw.a(cocoa_window.o)
      __glfwPlatformInit in libglfw.a(cocoa_init.o)
  ".objc_class_name_NSAutoreleasePool", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_window.o)
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_init.o)
  ".objc_class_name_NSString", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_window.o)
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_init.o)
  ".objc_class_name_NSCursor", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_window.o)
  ".objc_class_name_NSScreen", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_window.o)
  ".objc_class_name_NSOpenGLContext", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_window.o)
  ".objc_class_name_NSOpenGLPixelFormat", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_window.o)
  ".objc_class_name_NSWindow", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_window.o)
  ".objc_class_name_NSView", referenced from:
      .objc_class_name_GLFWContentView in libglfw.a(cocoa_window.o)
  ".objc_class_name_NSMenuItem", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_init.o)
  ".objc_class_name_NSMenu", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_init.o)
  ".objc_class_name_NSBundle", referenced from:
      pointer-to-literal-objc-class-name in libglfw.a(cocoa_init.o)
  ".objc_class_name_NSThread", referenced from:
      .objc_class_name_GLFWThread in libglfw.a(cocoa_init.o)
  ".objc_class_name_NSApplication", referenced from:
      .objc_class_name_GLFWApplication in libglfw.a(cocoa_init.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

你是在Xcode中构建这个项目还是通过命令行或者make文件呢? - Michael Dautermann
它是从Makefile运行的。我忘记在问题中添加命令了 - 我现在会编辑并添加它。 - Haldean Brown
Foundation 没有,但 Cocoa 有。感谢您的帮助! - Haldean Brown
1个回答

2
解决了——我在链接时使用的是Carbon,而新版本的GLFW使用Cocoa。将-framework Carbon替换为-framework Cocoa解决了这个问题。

有没有人或者你知道如何在Cmake中添加这些标志? - Brian Yeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接