AWS SDK for CPP执行make时卡在88%,寻求解决办法
AWS SDK for C++编译卡在ub_S3.cpp.o阶段的解决思路
问题详情
编译AWS SDK for C++时,执行make命令后卡在S3模块的代码编译步骤,当前输出状态:
[ 88%] Built target aws-cpp-sdk-core [ 88%] Building CXX object aws-cpp-sdk-s3/CMakeFiles/aws-cpp-sdk-s3.dir/ub_S3.cpp.o
相关环境与操作:
- CMake版本:3.21.7
- 源码来源:从官方GitHub仓库克隆
- CMake配置命令:
cmake ../aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/usr/local/ -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_ONLY="s3"
解决思路
- 排查系统资源瓶颈:
ub_S3.cpp是S3模块中代码量较大的文件,Debug编译会生成完整调试符号并关闭优化,对CPU和内存消耗很高。用top或htop查看系统资源占用,如果CPU跑满或内存不足,关闭其他占用资源的进程,或临时增加系统可用资源。 - 限制编译并行数:默认
make会使用与CPU核心数一致的并行任务,若系统资源不足,手动指定更小的并行数,比如make -j2(根据自身硬件调整,避免资源过载)。 - 切换Release编译模式:如果不需要调试信息,将
CMAKE_BUILD_TYPE改为Release后重新编译,编译速度会大幅提升:
cmake ../aws-sdk-cpp -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/usr/local/ -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_ONLY="s3" make
- 检查磁盘IO性能:用
iostat查看磁盘读写状态,如果磁盘IO使用率过高,说明磁盘读写是瓶颈。将源码和编译目录迁移到SSD上,可显著提升编译效率。 - 更新编译器与依赖:旧版本GCC/Clang处理大文件时效率较低,尝试升级到较新的编译器版本。同时确保系统已安装完整的依赖库(如openssl、curl等)。
- 清理缓存重新编译:若之前的编译缓存存在损坏,删除build目录后重新配置编译:
rm -rf build && mkdir build && cd build cmake ../aws-sdk-cpp -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/usr/local/ -DCMAKE_INSTALL_PREFIX=/usr/local/ -DBUILD_ONLY="s3" make
内容的提问来源于stack exchange,提问作者s_s
相关产品推荐
相关产品推荐

