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

M1 Mac运行OpenCV C++项目报arm64架构未定义符号错误求助

问题根因与解决步骤
  • 修正CMakeLists.txt配置
    你当前的配置仅引入了OpenCV的头文件路径,未将可执行文件与OpenCV的动态库做链接,是触发Undefined symbols for architecture arm64报错的核心原因。修改后的完整CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.19)
project(test)

# 指定编译架构为arm64,避免生成x86_64架构产物
set(CMAKE_OSX_ARCHITECTURES arm64)
set(CMAKE_CXX_STANDARD 14)

# 这里建议替换为你实际安装的OpenCV版本对应的路径,也可直接删除此行让cmake自动检索
set(OpenCV_DIR "/opt/homebrew/Cellar/opencv/4.8.0_1/share/opencv4")

find_package( OpenCV REQUIRED )
include_directories(include ${OpenCV_INCLUDE_DIRS} )
add_executable(test main.cpp)
# 新增链接OpenCV库的配置
target_link_libraries(test ${OpenCV_LIBS})

注意将上面OpenCV_DIR路径里的版本号替换为你实际安装的OpenCV版本,可执行ls /opt/homebrew/Cellar/opencv查看本地安装的版本号。

  • 确认OpenCV架构匹配
    M1系列芯片为arm64架构,如果你的OpenCV是在Rosetta兼容模式下通过Homebrew安装的,得到的是x86_64架构的库文件,会触发架构不匹配的报错。执行以下命令验证OpenCV库架构:
file /opt/homebrew/Cellar/opencv/*/lib/libopencv_core.dylib

如果输出结果中包含arm64则架构正常,如果仅包含x86_64,需要关闭Terminal的Rosetta兼容模式,重新执行brew install opencv安装arm64版本的OpenCV。

  • 清理缓存重新编译
    之前生成的x86_64架构编译缓存也会导致报错,执行以下命令清空缓存重新构建:
# 进入项目根目录后执行
rm -rf build
mkdir build && cd build
cmake ..
make

编译完成后运行生成的test可执行文件即可。如果运行时发现imread读取图片为空,可将hej.jpg替换为绝对路径验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:15:03