如何在Mac M1设备上正确构建归档版本Intel TBB 2019_U9
Mac M1 环境编译 Intel TBB 2019_U9 可行方案
问题根因
TBB 2019_U9 发布早于 Apple Silicon 面世,官方构建脚本无法正确识别 arm64 架构,会误将 M1 芯片判定为 32 位 x86(ia32)架构,自动注入 -m32 编译参数,最终导致架构不匹配报错、构建进程无响应。
方案一:编译 x86_64 版本(适配 Rosetta,无需修改源码)
如果上层应用可通过 Rosetta 运行,直接指定 x86_64 架构构建即可:
- 构建命令:
arch -x86_64 make arch=intel64
- 验证:构建完成后执行
lipo -info libtbb_debug.dylib,输出包含x86_64即为构建成功,可直接在 Rosetta 环境下链接使用。
方案二:编译原生 arm64 版本(需修改构建配置与源码)
如果需要原生 arm64 性能,按以下步骤修改后构建:
- 修改
build/macos.inc文件,新增 arm64 架构识别逻辑,在架构判定代码段添加如下配置:
ifeq ($(arch),arm64) override arch=arm64 MACOS_FLAGS += -arch arm64 endif
- 编辑
build/macos.clang.inc,删除默认自动添加的-m32参数,跳过针对 x86 架构的特有编译选项。 - 注释源码中所有 x86 特有指令(如 RTM、TSX 相关)的实现,替换为通用自旋锁逻辑:可修改
include/tbb/machine/mac_ppc.h,或新增 arm 架构对应的头文件引用,屏蔽 x86 专属汇编代码。
修改完成后执行构建命令:
make arch=arm64
构建完成后得到的动态库即为原生 arm64 架构,可直接给 Apple Silicon 原生应用链接使用。
内容的提问来源于stack exchange,提问作者trisimix
相关产品推荐
相关产品推荐

