编译grpc_python_plugin时遇‘-std=c++11’仅适用于C++/ObjC++错误
解决编译grpc_python_plugin时的
-std=c++11 C编译错误 我之前也碰到过一模一样的问题——本质是gRPC的Makefile不小心把C++专属的编译选项-std=c++11应用到了C源文件(address_sorting.c)上,再加上开启了-Werror把所有警告都当成错误处理,直接导致编译失败。这里给你几个实用的解决办法:
方法1:临时绕过警告转错误(最快)
不用改任何文件,执行make时直接关闭-Werror的强制错误处理:
make grpc_python_plugin WERROR=0
这个方法适合快速完成编译,临时救急非常好用。
方法2:修复Makefile的编译选项(彻底解决)
如果想从根源上修复,你可以定位到gRPC根目录的Makefile,调整编译选项的划分:
- 找到
CFLAGS(C语言编译选项)的定义,检查是不是混入了-std=c++11,把它移到CXXFLAGS(C++语言编译选项)里 - 另外也可以单独检查
third_party/address_sorting相关的编译规则,看看是不是子模块错误继承了上层的C++选项
比如你可以搜索Makefile里的-std=c++11,确认它只出现在针对C++文件的编译规则中,不要影响C文件的编译。
方法3:换用CMake编译(更稳定)
gRPC官方也支持用CMake编译,这种方式会自动区分C和C++的编译选项,大概率能避开这类问题:
- 先创建编译目录并进入:
mkdir -p cmake/build && cd cmake/build
- 配置CMake:
cmake ../..
- 编译grpc_python_plugin:
make grpc_python_plugin
如果你的系统环境比较特殊,CMake的编译方式往往比根目录的Makefile兼容性更好。
额外小提示
如果你的gcc版本比较旧(比如低于7.x),也可能出现这类标准选项的兼容问题,尝试升级gcc到较新的稳定版,也能减少类似编译报错。
内容的提问来源于stack exchange,提问作者jiexray
相关产品推荐
相关产品推荐

