M1 Mac编译GLFW项目遇arm64架构未定义符号错误求助
解决M1 MacBook上GLFW符号未定义的链接错误
先补全GLFW库文件
你目前只放了GLFW的头文件,但链接器需要二进制库文件(静态库libglfw3.a或动态库libglfw.3.dylib)才能找到_glfwCreateWindow、_glfwInit这些函数的实现。- 去GLFW官网下载适配M1 arm64架构的预编译库,解压后把
lib目录里的库文件复制到项目的lib/GLFW下; - 若找不到合适的预编译库,可手动编译:下载GLFW源码,创建build目录后执行以下命令,编译完成后取
build/src下的libglfw3.a:cmake -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_BUILD_TYPE=Release .. make
- 去GLFW官网下载适配M1 arm64架构的预编译库,解压后把
修改Makefile的链接参数
原编译命令只包含了头文件路径,要补充库路径、GLFW库及macOS依赖框架。示例Makefile:CC = clang++ CFLAGS = -std=c++17 -Ilib/GLFW # 链接GLFW库+macOS系统框架 LDFLAGS = -Llib/GLFW -lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo output: main.cpp $(CC) $(CFLAGS) main.cpp -o output $(LDFLAGS)调整VS Code编译配置
在.vscode/tasks.json的编译参数中加入链接相关内容,示例配置:{ "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "clang++", "args": [ "-std=c++17", "-Ilib/GLFW", "main.cpp", "-o", "output", "-Llib/GLFW", "-lglfw3", "-framework", "Cocoa", "-framework", "OpenGL", "-framework", "IOKit", "-framework", "CoreVideo" ], "group": {"kind": "build", "isDefault": true} } ] }验证库架构匹配
确保GLFW库是arm64架构,执行以下命令检查:lipo -info lib/GLFW/libglfw3.a输出包含
arm64即为适配M1的版本。
内容的提问来源于stack exchange,提问作者Solon
相关产品推荐
相关产品推荐

