在OSX用Bazel编译TensorFlow工具时遭遇gcc命令行选项错误
解决OSX下Bazel编译TensorFlow时
gcc: error: unrecognized command line option '-fobjc-link-runtime'错误 这个问题我之前也碰到过——核心原因是Bazel在macOS环境下默认会添加Objective-C相关的链接参数,但你使用的MacPorts gcc 4.9.4并不支持-fobjc-link-runtime这个选项,直接导致链接阶段失败。下面给你两个可行的解决方向:
方法1:切换到Clang编译(推荐)
macOS自带的Xcode Clang对Objective-C支持非常好,也是TensorFlow官方推荐的编译工具,完全适配Bazel的默认配置。
临时生效(仅当前终端)
在终端里先执行这两行命令:
export CC=clang export CXX=clang++
然后重新运行你的编译指令:
bazel build tensorflow/python/tools:freeze_graph
永久生效(所有终端会话)
把环境变量添加到你的shell配置文件里(比如~/.bash_profile或者~/.zshrc,根据你用的shell来选):
打开配置文件,在末尾加上:
export CC=clang export CXX=clang++
保存后执行source ~/.bash_profile(对应你修改的配置文件),让设置立刻生效。
方法2:修改Bazel配置移除不兼容参数(适合坚持用GCC的场景)
如果你一定要用MacPorts的GCC,可以手动修改Bazel缓存里的protobuf配置文件:
- 找到错误提示里的BUILD文件路径:
/private/var/tmp/_bazel_macuser/521cd0aef0e1f687906b0f761e1e0f08/external/protobuf_archive/BUILD - 打开这个文件,定位到
js_embed这个目标的链接配置部分,把里面的-fobjc-link-runtime参数删掉 - 重新运行编译命令
不过这个方法有个弊端:如果Bazel清理了缓存,你就得重新修改一遍,所以还是更推荐第一种切换到Clang的方案。
另外提一句,你用的Bazel 0.11.1版本比较旧了,如果后续还有其他编译问题,可以考虑升级到和你当前TensorFlow版本兼容的Bazel版本,能减少不少版本适配的坑。
内容的提问来源于stack exchange,提问作者bear
相关产品推荐
相关产品推荐

