x86_64架构Mac编译GLFW OpenGL窗口项目报Undefined symbols错误求助
错误原因
这是典型的链接阶段符号未找到错误,不属于编译错误。你只在代码中引入了GLFW的头文件,头文件仅提供函数声明,编译时没有链接GLFW对应的库文件,导致链接器无法找到glfw相关函数的具体实现。同时结合你使用x86_64架构的Intel芯片Mac,也可能存在你下载的GLFW库仅适配arm64架构、不兼容x86_64架构的情况。
解决方法
根据你的编译方式选择对应方案即可:
命令行直接编译
你使用的是本地存放的glfw-3.3.5二进制包,执行以下编译命令即可:
clang main.c -o glfw_demo -I./glfw-3.3.5.bin.MACOS/include -L./glfw-3.3.5.bin.MACOS/lib -lglfw -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo
参数说明:
-I指定GLFW头文件的搜索路径-L指定GLFW库文件的搜索路径-lglfw链接GLFW库- 末尾的四个
-framework参数是Mac平台下GLFW依赖的系统框架,必须添加,否则仍会报链接错误
Xcode项目编译
如果在Xcode中开发,按以下步骤配置:
- 打开项目的
Build Settings面板,在Header Search Paths中添加GLFW头文件的完整路径 - 同面板下在
Library Search Paths中添加GLFW库文件的完整路径 - 打开
Build Phases面板,在Link Binary With Libraries中添加libglfw3.a(静态库)或对应动态库,再添加Cocoa、OpenGL、IOKit、CoreVideo四个系统框架
更简便的全局安装方案
可以通过homebrew直接安装适配你架构的GLFW,无需手动管理本地二进制包:
- 执行安装命令:
brew install glfw - 编译时无需指定本地GLFW的头文件和库路径,直接执行简化后的编译命令即可:
clang main.c -o glfw_demo -lglfw -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo
内容的提问来源于stack exchange,提问作者Alvin Cheng
相关产品推荐
相关产品推荐

