Docker中Ubuntu16.04通过vcpkg安装grpc失败求助
问题分析与解决思路
核心原因
这不是缺少依赖,是Ubuntu 16.04默认的GCC版本过低(5.x)触发的编译器内部bug。grpc较新版本的percent_encoding.cc中使用了复杂的constexpr代码,而GCC 5对C++11/14 constexpr的支持不完善,处理这类代码时容易出现内部错误(ICE,Internal Compiler Error)。
解决方法
1. 升级Docker内的GCC版本
Ubuntu 16.04可通过PPA安装更高版本的GCC(推荐7及以上),步骤如下:
# 添加工具链PPA add-apt-repository ppa:ubuntu-toolchain-r/test apt-get update # 安装GCC7 apt-get install -y gcc-7 g++-7 # 设置GCC7为默认编译器 update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7
完成后重新执行vcpkg安装命令:
./vcpkg install grpc:x64-linux
2. 指定兼容的grpc旧版本
如果不想升级编译器,可安装对GCC5更友好的grpc旧版本(比如1.48.x系列):
./vcpkg install grpc:x64-linux@1.48.2
3. 仅构建Release版本
Debug模式下编译器对constexpr的检查和展开逻辑更严格,可跳过Debug版本直接安装Release:
./vcpkg install grpc:x64-linux --release
内容的提问来源于stack exchange,提问作者Francesco Saverio Comisso
相关产品推荐
相关产品推荐

