Ubuntu 20.04编译Protocol Buffers 3.18.0时protobuf-test测试失败问询
Protobuf 3.18.0 测试失败原因分析
失败常见原因
- 内存不足(概率最高)
protobuf-test是Protobuf完整功能集的测试套件,运行时需要加载数百个测试用例、批量创建各类Protobuf对象,3.18.0版本的该测试峰值内存占用约为4~5GiB。你的设备内存仅3.8GiB,若未配置足够的swap分区,测试进程很容易被系统OOM机制直接终止,从而报错。其余6项测试均为轻量化测试(比如Lite版本测试、单模块功能测试),内存占用远低于protobuf-test,所以能全部通过,完全符合内存不足的表现。 - 版本适配问题(概率较低)
Protobuf 3.18.0是较老的版本,在Ubuntu 20.04.3 LTS上存在少量已知的测试用例兼容性bug,但这类问题通常会在test-suite.log中输出明确的断言失败日志,不会直接终止测试进程。 - 编译依赖缺失(概率极低)
若configure阶段有依赖遗漏,通常会导致多个测试失败,不会仅出现protobuf-test单测失败的情况。
验证方法
查看src/test-suite.log文件中的具体错误输出:
- 如果日志中存在
Killed、Out of memory、OOM相关字样,即可确认是内存配置不足导致的失败。 - 如果日志中是明确的用例断言失败,则为版本适配问题。
解决方案
如果确认是内存不足导致的问题,可通过临时增加4G swap分区解决:
# 创建4G swap文件 sudo fallocate -l 4G /swapfile # 配置swap权限 sudo chmod 600 /swapfile # 格式化swap sudo mkswap /swapfile # 启用swap sudo swapon /swapfile # 重新运行测试 make check
若不需要使用Protobuf全量高级特性,仅需核心功能或Lite版本功能,也可以直接跳过该测试,执行sudo make install安装使用,其余6项测试通过已经可以保证核心功能正常。
内容的提问来源于stack exchange,提问作者human
相关产品推荐
相关产品推荐

