Mac M3编译C++报错:'value'不可用(引入于macOS 10.13)
问题描述
在M3芯片MacBook上编译关联PyTorch的C++文件时出现以下错误:
/opt/anaconda3/lib/python3.8/site-packages/torch/include/ATen/core/function_schema.h:603:46: error: 'value' is unavailable: introduced in macOS 10.13 auto default_val = arg.default_value().value().toIntList(); ^ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/optional:1057:33: note: 'value' has been explicitly marked unavailable here constexpr value_type const& value() const& fatal error: too many errors emitted, stopping now [-ferror-limit=]
使用环境:
- Anaconda环境,Python版本3.8/3.11
- 编译器:Apple clang version 15.0.0 (clang-1500.3.9.4)
该编译操作在i9处理器MacBook上可正常运行。
解决方案
设置macOS最低部署版本
std::optional::value()是C++17特性,且要求macOS 10.13及以上版本支持。编译时需指定最低部署版本参数:- 直接在编译命令中添加:
-mmacosx-version-min=10.13 - 若使用CMake,在CMakeLists.txt中添加:
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "Minimum macOS version")
- 直接在编译命令中添加:
确保Anaconda环境适配arm64架构
M3芯片为arm64架构,需使用对应架构的Anaconda环境:- 检查当前环境架构:运行
conda info,查看platform字段是否为osx-arm64 - 若为x86_64环境,重新创建arm64环境:
conda create -n arm_env python=3.11 conda activate arm_env
- 检查当前环境架构:运行
更新PyTorch到适配Apple Silicon的版本
旧版本PyTorch对Apple Silicon支持不完善,更新至官方适配版本:conda install pytorch torchvision torchaudio -c pytorch临时替换
value()调用(不推荐,仅当无法修改部署目标时使用)
修改出错的头文件function_schema.h,将arg.default_value().value()替换为*arg.default_value(),利用std::optional的解引用操作符获取值。
内容的提问来源于stack exchange,提问作者Michel
相关产品推荐
相关产品推荐

