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
相关产品推荐
相关产品推荐

