You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

glfw-3.3.5 M1芯片arm64架构Undefined symbols编译错误求解

错误根因排查
  • CMake链接指令使用错误:你声明的可执行目标名为小写game,但link_libraries中错误使用了大写Game作为目标名;且link_libraries是全局链接配置指令,针对单个目标指定链接库应该使用target_link_libraries。
  • 仅配置了依赖头文件路径,未实际编译/链接依赖库文件:你只将glew、glfw的头文件和源码目录加入了头文件搜索路径,但没有将源码编译进目标,也没有链接预编译好的glfw、glew库文件。
  • 缺少macOS平台必要的系统框架链接:OpenGL相关功能在macOS上需要依赖OpenGL、Cocoa、IOKit、CoreVideo等系统框架,你未在链接配置中加入这些依赖。
  • 依赖架构不匹配:如果你使用的glfw、glew是预编译的x86_64版本,在M1 arm64架构下也会报符号找不到错误。
修复方案

1. 修改CMakeLists.txt配置

替换为以下内容,可选择源码编译依赖或调用homebrew安装的预编译依赖:

cmake_minimum_required(VERSION 3.12)
project(Game VERSION 1.0.0)

set(PROJECT_DEPS "${PROJECT_SOURCE_DIR}/deps")
set(glew_dir "${PROJECT_DEPS}/glew-2.1.0")
set(glfw_dir "${PROJECT_DEPS}/glfw-3.3.5")
set(glm_dir "${PROJECT_DEPS}/glm")

# 头文件路径配置
include_directories(
    ${PROJECT_SOURCE_DIR}
    ${PROJECT_BINARY_DIR}
    ${glm_dir}
    ${glew_dir}/include
    ${glfw_dir}/include
)

# 源码编译glew
add_library(glew STATIC ${glew_dir}/src/glew.c)
target_compile_definitions(glew PRIVATE GLEW_STATIC)

# 源码编译glfw
add_subdirectory(${glfw_dir} ${CMAKE_BINARY_DIR}/glfw)

# 生成可执行目标
add_executable(game main.cpp)

# 链接所有依赖,包含macOS系统框架
target_link_libraries(game PRIVATE
    glew
    glfw
    "-framework OpenGL"
    "-framework Cocoa"
    "-framework IOKit"
    "-framework CoreVideo"
)

如果你不想源码编译依赖,可通过homebrew安装arm64版本的glfw、glew:执行brew install glfw glew后,将CMake配置中源码编译部分替换为find_package(glfw3 REQUIRED)、find_package(GLEW REQUIRED)即可。

2. 修正main.cpp头文件包含

将原glfw、glew的头文件包含改为标准层级写法:

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <GLFW/glfw3native.h>
#include <glm/glm.hpp>
// 原有业务逻辑保留

3. 重新编译

删除原有build目录缓存,重新执行cmake生成配置后再运行make即可正常编译。

内容的提问来源于stack exchange,提问作者MattC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:36:03