Ubuntu 22 EC2实例中gRPC构建中断问题求助
gRPC构建中断问题排查
环境
- AWS EC2实例(Ubuntu 22系统)
执行操作
$ cd grpc $ mkdir -p cmake/build $ pushd cmake/build $ cmake -DgRPC_INSTALL=ON \ -DgRPC_BUILD_TESTS=OFF \ -DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR \ ../.. $ make -j 4
构建输出
[ 42%] Built target flags Consolidate compiler generated dependencies of target grpc_unsecure [ 42%] Building CXX object CMakeFiles/grpc_unsecure.dir/src/core/ext/filters/channel_idle/channel_idle_filter.cc.o [ 42%] Building CXX object CMakeFiles/grpc.dir/src/core/ext/filters/client_channel/client_channel.cc.o [ 42%] Building CXX object CMakeFiles/grpc.dir/src/core/ext/filters/client_channel/client_channel_channelz.cc.o [ 42%] Linking CXX static library libprotoc.a [ 45%] Built target libprotoc [ 45%] Building CXX object third_party/abseil-cpp/absl/flags/CMakeFiles/flags_usage_internal.dir/internal/usage.cc.o In file included from /home/ubuntu/.local/grpc/src/core/ext/filters/channel_idle/channel_idle_filter.cc:43: /home/ubuntu/.local/grpc/src/core/lib/promise/loop.h:121:31: warning: attribute ignored in declaration of ‘union grpc_core::promise_detail::Loop<F>::<unnamed>’ [-Wattributes] 121 | GPR_NO_UNIQUE_ADDRESS union { GPR_NO_UNIQUE_ADDRESS PromiseType promise_; }; | ^ /home/ubuntu/.local/grpc/src/core/lib/promise/loop.h:121:31: note: attribute for ‘union grpc_core::promise_detail::Loop<F>::<unnamed>’ must follow the ‘union’ keyword [ 45%] Building CXX object CMakeFiles/grpc.dir/src/core/ext/filters/client_channel/client_channel_factory.cc.o [ 45%] Linking CXX static library libabsl_flags_usage_internal.a [ 45%] Built target flags_usage_internal [ 45%] Building CXX object CMakeFiles/grpc_plugin_support.dir/src/compiler/cpp_generator.cc.o
中断原因分析
输出里的GPR_NO_UNIQUE_ADDRESS相关提示只是编译警告,不会直接终止构建。实际导致中断的常见原因有以下几种:
EC2实例资源耗尽:
make -j4启用了4个并发编译进程,如果你的EC2实例内存或CPU性能有限,高并发编译可能触发OOM(内存不足),系统会直接杀死编译进程。可以尝试降低并发数,比如改用make -j2甚至单进程make编译。gRPC子模块未完整拉取:gRPC依赖abseil-cpp等第三方子模块,如果克隆仓库时没加
--recurse-submodules参数,子模块代码不完整会导致编译到中途失败。回到grpc根目录执行git submodule update --init --recursive补全所有子模块,再重新执行cmake和make。系统编译依赖缺失:Ubuntu 22系统可能缺少必要的编译工具或依赖库,比如cmake版本过低、C++编译器不兼容,或者缺少libssl-dev、zlib1g-dev这类基础库。先执行
sudo apt update && sudo apt install build-essential cmake libssl-dev zlib1g-dev补全依赖,再重新尝试编译。
内容的提问来源于stack exchange,提问作者박진혁
相关产品推荐
相关产品推荐

