MacBook M1 Pro上Bazel构建失败:无法链接protobuf求助
Bazel编译protoc触发段错误的排查方案
环境信息
➜ go version go version go1.22.1 darwin/arm64 ➜ protoc --version libprotoc 26.1
原始错误信息
ERROR: /private/var/tmp/_bazel_anupam/6e9e2a4c19c72b35e7d629ca2e2fa985/external/com_google_protobuf/BUILD:480:10: 链接外部依赖@com_google_protobuf//:protoc工具失败:(退出码1) cc_wrapper.sh执行出错,命令来自目标@com_google_protobuf//:protoc:external/local_config_cc/cc_wrapper.sh @bazel-out/darwin_arm64-opt-exec-2B5CBBC6-ST-e846b08c7501/bin/external/com_google_protobuf/protoc-2.params 使用--sandbox_debug参数查看沙箱的详细日志,并保留沙箱构建根目录用于调试 clang: error: 无法执行命令:段错误:11
添加--sandbox_debug后的详细日志
external/zlib/zutil.c:315:20: 警告:无原型的函数定义在所有C版本中已被弃用,C2x版本不再支持 [-Wdeprecated-non-prototype] void ZLIB_INTERNAL zcfree (opaque, ptr) ^ 生成了3条警告。 ERROR: /private/var/tmp/_bazel_anupam/6e9e2a4c19c72b35e7d629ca2e2fa985/external/com_google_protobuf/BUILD:480:10: 链接外部依赖@com_google_protobuf//:protoc工具失败:(退出码1) sandbox-exec执行出错: (cd /private/var/tmp/_bazel_anupam/6e9e2a4c19c72b35e7d629ca2e2fa985/sandbox/darwin-sandbox/1900/execroot/__main__ && \ exec env - \ PATH=/opt/homebrew/Cellar/pyenv-virtualenv/1.2.1/shims:/Users/anupam/.pyenv/shims:/opt/homebrew/opt/llvm/bin:/Library/Frameworks/Python.framework/Versions/3.11/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/usr/local/go/bin:/Users/anupam/.cargo/bin:/Users/anupam/.fzf/bin \ PWD=/proc/self/cwd \ TMPDIR=/var/folders/w9/s_jqrs9s1d1cq0y3jfh0jwbw0000gn/T/ \ /usr/bin/sandbox-exec -f /private/var/tmp/_bazel_anupam/6e9e2a4c19c72b35e7d629ca2e2fa985/sandbox/darwin-sandbox/1900/sandbox.sb /var/tmp/_bazel_anupam/install/3d6628bc87ba9f6bdce44dfed9a168e8/process-wrapper '--timeout=0' '--kill_delay=15' '--stats=/private/var/tmp/_bazel_anupam/6e9e2a4c19c72b35e7d629ca2e2fa985/sandbox/darwin-sandbox/1900/stats.out' external/local_config_cc/cc_wrapper.sh @bazel-out/darwin_arm64-opt-exec-2B5CBBC6-ST-e846b08c7501/bin/external/com_google_protobuf/protoc-2.params) clang: error: 无法执行命令:段错误:11 clang: error: 链接器命令因信号失败(使用-v查看调用详情)
排查解决方法
- 禁用Bazel沙箱:编译时添加
--spawn_strategy=local参数,绕过macOS的sandbox-exec限制,该组件有时会与clang链接器冲突引发段错误。 - 切换到系统自带clang:从环境变量PATH中移除
/opt/homebrew/opt/llvm/bin,让Bazel使用/usr/bin/clang,Homebrew版LLVM与Bazel的cc_wrapper存在兼容性问题。 - 升级Bazel版本:旧版Bazel在arm64架构的macOS上处理外部依赖链接存在已知bug,升级到最新稳定版(如7.x系列)可修复此类问题。
- 指定兼容的protobuf版本:在WORKSPACE文件中明确指定适配arm64 macOS的protobuf版本(如25.x或26.x的最新补丁版),避免默认拉取的版本存在编译缺陷。
- 清理Bazel缓存:执行
bazel clean --expunge清除所有缓存,重新拉取依赖编译,缓存损坏也可能导致链接阶段异常。
内容的提问来源于stack exchange,提问作者Anupam
相关产品推荐
相关产品推荐

