跳过正文
Background Image
  1. Posts/

运行 lcov 报错 "Can't locate JSON/PP.pm in @INC ..."

·360 字·1 分钟· ·
沈显鹏
作者
沈显鹏
目录

在执行以下命令生成代码覆盖率报告时:

lcov --capture --directory . --no-external --output-file coverage.info

我遇到了如下错误:

Capturing coverage data from .
Can't locate JSON/PP.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/bin/geninfo line 63.
BEGIN failed--compilation aborted at /usr/local/bin/geninfo line 63.

1. Can’t locate CPAN.pm
#

当运行 perl -MCPAN -e 'install JSON' 时出现:

Can't locate CPAN.pm in @INC ...

解决方法:安装 perl-CPAN

sudo yum install perl-CPAN

2. Can’t locate JSON/PP.pm
#

安装好 CPAN 后,再运行安装 JSON:

sudo perl -MCPAN -e 'install JSON'

如果依然报找不到 JSON/PP.pm,可通过复制 backportPP.pm 解决:

cd /usr/local/share/perl5/JSON
cp backportPP.pm PP.pm

3. Can’t locate Module/Load.pm
#

geninfo --version
Can't locate Module/Load.pm in @INC ...

解决方法:安装 perl-Module-Load-Conditional

sudo yum install perl-Module-Load-Conditional

4. Can’t locate Capture/Tiny.pm
#

lcov --version
Can't locate Capture/Tiny.pm in @INC ...

解决方法:用 CPAN 安装 Capture::Tiny

perl -MCPAN -e 'install Capture::Tiny'

5. Can’t locate DateTime.pm
#

genhtml --help
Can't locate DateTime.pm in @INC ...

在 CentOS 7 下安装:

sudo yum install 'perl(DateTime)'

(但我测试中该方法无效,仅作参考。)


6. 运行 geninfo 报 Zlib 版本错误
#

Compress::Raw::Zlib version 2.201 required--this is only version 2.061 ...

解决方法:安装最新 Compress::Raw::Zlib

perl -MCPAN -e 'install Compress::Raw::Zlib'

通过逐一安装缺失的 Perl 模块,lcov 最终恢复正常工作:

lcov --version
lcov: LCOV version v1.16-16-g038c2ca

转载本文请注明作者与出处,禁止商业用途。欢迎关注公众号「DevOps攻城狮」。

相关文章

使用 Gcov 和 LCOV 做 C/C++ 项目的代码覆盖率
·1969 字·4 分钟
本文介绍了如何使用 Gcov 和 LCOV 对 C/C++ 项目进行代码覆盖率的度量,包括编译、运行和生成报告的步骤。
SonarQube 安装与常见问题排查
·714 字·2 分钟
本文记录了 SonarQube 的安装步骤,包括 LDAP 配置与 PostgreSQL 数据库设置,并附带一些常见问题的排查方法。
修复 "hidden symbol `__gcov_init' in ../libgcov.a(_gcov.o) is referenced by DSO" 错误
·362 字·1 分钟
本文介绍在使用 Gcov 编译项目进行代码覆盖率统计时,出现 “hidden symbol `__gcov_init’…” 等错误的原因及解决方法,包括如何在构建时确保符号不被隐藏。
使用 REST API 添加或更新 Bitbucket 构建状态
·364 字·1 分钟
本文介绍如何通过 Bitbucket REST API 为指定提交添加或更新构建状态,并给出 Shell 脚本示例,适用于手动修复或补充构建状态的场景。
关于代码覆盖率 (About Code Coverage)
·1527 字·4 分钟
本文简要介绍了代码覆盖率的概念、重要性、常见指标、工作原理以及主流工具,强调了不要过度依赖代码覆盖率指标。
Jenkins 作业超时后让构建失败的方法(已解决)
·331 字·1 分钟
本文介绍如何在 Jenkins 流水线中正确处理超时场景,通过 try 和 catch 结合 error 确保超时后作业会失败。