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)
...