如何解决lcov运行时的Perl_xs_handshake符号查找错误
解决lcov调用系统Perl导致的版本冲突问题
针对你遇到的多版本Perl冲突问题,以下是几种无需修改系统文件的可行解决方案:
方案1:临时修改环境变量优先指定Perl路径
在执行make coverage前,将目标Perl的bin目录放到PATH环境变量最前端,让系统优先选用该版本的Perl:
export PATH=/opt/scorec/spack/v0154_2/install/linux-rhel7-x86_64/gcc-10.1.0/perl-5.30.3-tmxduzj6hwvxe6ccra6jg3ec65ltesis/bin:$PATH make coverage
如果需要在当前shell会话中永久生效,可将上述export命令添加到~/.bashrc或~/.bash_profile文件末尾,执行source ~/.bashrc生效。
方案2:通过CMake配置指定Perl路径
直接在CMakeLists.txt中设置LCOV_PERL_EXECUTABLE变量,告诉CodeCoverage.cmake模块使用指定版本的Perl:
# 引入CodeCoverage.cmake前或后添加均可 set(LCOV_PERL_EXECUTABLE "/opt/scorec/spack/v0154_2/install/linux-rhel7-x86_64/gcc-10.1.0/perl-5.30.3-tmxduzj6hwvxe6ccra6jg3ec65ltesis/bin/perl") # 原有的CodeCoverage模块引入语句 include(CodeCoverage)
修改后重新执行CMake配置(例如cmake --build . --target clean && cmake ..),再运行make coverage即可。
方案3:制作lcov包装脚本绕开系统Perl
如果前两种方案无法生效,可通过包装脚本强制lcov使用指定Perl:
- 创建脚本文件(例如
my_lcov.sh),内容如下:
#!/bin/bash exec /opt/scorec/spack/v0154_2/install/linux-rhel7-x86_64/gcc-10.1.0/perl-5.30.3-tmxduzj6hwvxe6ccra6jg3ec65ltesis/bin/perl /usr/bin/lcov "$@"
- 给脚本添加执行权限:
chmod +x my_lcov.sh
- 在CMakeLists.txt中指定lcov的执行路径为该脚本:
set(LCOV_EXECUTABLE "/path/to/your/my_lcov.sh") include(CodeCoverage)
- 重新执行CMake配置后运行
make coverage。
内容的提问来源于stack exchange,提问作者PrestonH2O
相关产品推荐
相关产品推荐

