Ubuntu 20源码安装perl-5.14.2执行make test报Errno错误如何解决
问题产生原因
Perl 5.14.2是2011年发布的老旧版本,和Ubuntu 20.04自带的gcc 9.3.0、glibc 2.31版本存在兼容性问题。该版本perl的Errno扩展模块的符号生成逻辑,无法识别新系统头文件中errno宏的定义格式,最终导致没有任何errno符号被导出,触发测试失败终止。
解决方法
方案1:快速跳过测试安装(适用于对测试通过率无强制要求的场景)
make编译完成后无需执行make test,直接运行make install即可,该问题不会影响perl绝大多数核心功能的正常使用。
方案2:打兼容性补丁通过全量测试
- 进入perl-5.14.2源码目录,打开
ext/Errno/Errno_pm.PL文件 - 找到文件中解析系统errno头文件的正则匹配段,将原有仅匹配旧版头文件格式的规则,调整为兼容gcc 9+生成的头文件格式:将匹配
^#define\s+([A-Z0-9_]+)\s+[0-9]+的逻辑,新增对带括号、宏嵌套格式的errno定义的匹配支持 - 执行
make clean清理之前的编译缓存 - 重新执行完整的编译安装流程:
cd perl-5.14.2 ./Configure -des -Dprefix=$HOME/localperl make make test make install
如果没有强依赖Perl 5.14.2的场景,建议直接使用Ubuntu官方源提供的perl包,或者编译安装更新的稳定版perl(如5.36+),无需额外适配即可兼容Ubuntu 20.04系统。
内容的提问来源于stack exchange,提问作者Zilmarij Iqbal
相关产品推荐
相关产品推荐

