如何在macOS High Sierra 10.13.6上用Homebrew安装llvm@13并修复lldELF报错
这个编译错误的根源是macOS High Sierra自带的系统SDK版本过低,未包含CPU_SUBTYPE_ARM64E常量定义——该常量是苹果后续推出arm64e架构后才新增到系统SDK中的,而LLVM 13默认会编译lldb组件,该组件的代码调用了这个未定义的常量,因此触发编译失败。
解决方法1:跳过lldb组件编译(操作最简便)
绝大多数场景下将llvm@13作为依赖使用时,不需要用到lldb调试组件,直接移除该组件的编译配置即可,操作步骤:
- 执行命令
brew edit llvm@13打开llvm 13的Homebrew配方编辑页面 - 找到cmake参数段中的
LLVM_ENABLE_PROJECTS配置行,删除列表中的lldb项,保存文件后退出编辑器 - 重新执行
brew install llvm@13即可正常完成编译
解决方法2:手动打补丁适配旧系统SDK
如果你的使用场景必须用到lldb组件,可以通过给源码打补丁的方式解决常量未定义问题:
- 执行
brew install --interactive llvm@13进入交互式编译模式,Homebrew会自动完成源码下载、解压操作,并进入源码所在的临时目录 - 打开路径下的
lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm文件,在头部系统头文件导入代码的下方添加如下代码:
#ifndef CPU_SUBTYPE_ARM64E #define CPU_SUBTYPE_ARM64E 2 #endif
- 保存修改后,按照配方中的编译流程依次执行cmake、构建、安装命令,即可正常完成全组件编译
内容的提问来源于stack exchange,提问作者Hamid Rouhani
相关产品推荐
相关产品推荐

