macOS BigSur M1芯片编译BPP出现gcc相关报错该如何解决?
M1芯片Mac编译BPP报错解决方案
你的猜测正确,报错核心原因是BPP项目的默认编译配置仅适配x86架构,硬编码了SSE3/AVX等x86专属指令集参数,M1芯片为ARM架构,不支持上述指令集,因此无论用clang还是gcc编译都会报错,可按照以下步骤解决:
第一步:删除Makefile中的x86专属编译参数
进入bpp/src目录,打开Makefile文件,删除CFLAGS配置行中的-DHAVE_SSE3 -DHAVE_AVX -DHAVE_AVX2 -msse3参数,若存在-mavx、-mavx2等x86指令集相关参数也一并删除。第二步:处理x86专属头文件引用
打开bpp/src目录下的bpp.h文件,查找<x86intrin.h>、<immintrin.h>等x86专属SIMD头文件的引用语句,添加架构判断逻辑,修改为:
#if defined(__x86_64__) || defined(_M_X64) #include <x86intrin.h> #endif
如果项目本身提供了SIMD关闭开关,也可直接在编译参数中添加关闭SIMD的定义,避免手动修改头文件。
- 第三步:重新执行编译
先清理之前的编译缓存:
make clean
再执行编译命令即可,若你安装了gcc-11可指定编译器:
make CC=/opt/homebrew/bin/gcc-11
不需要gcc的场景下,用系统默认clang直接执行make也可。
备用兼容方案
如果修改后还是存在大量x86架构适配问题,可使用Rosetta 2转译环境编译运行:
右键点击终端应用,选择「显示简介」,勾选「使用Rosetta打开」,重启终端后再按照官方原始指引执行编译流程即可,该方案是模拟x86环境运行,兼容性更高但性能会有一定损失。
内容的提问来源于stack exchange,提问作者Merlin
相关产品推荐
相关产品推荐

