在Cygwin中执行makeinfo遇Perl模块缺失报错求解决方案
解决Cygwin中makeinfo报错“Can't locate if.pm”的问题
你遇到的错误信息如下:
23:16 Harshal:~> makeinfo Can't locate if.pm in @INC (you may need to install the if module) (@INC contains: /usr/lib/texinfo /usr/share/texinfo/lib/Text-Unidecode/lib /usr/share/texinfo/lib/Unicode-EastAsianWidth/lib /usr/share/texinfo/lib/libintl-perl/lib /usr/share/texinfo /usr/share/texinfo /usr/local/lib/perl5/site_perl/5.32/x86_64-cygwin-threads /usr/local/share/perl5/site_perl/5.32 /usr/lib/perl5/vendor_perl/5.32/x86_64-cygwin-threads /usr/share/perl5/vendor_perl/5.32 /usr/lib/perl5/5.32/x86_64-cygwin-threads /usr/share/perl5/5.32) at /usr/share/texinfo/Texinfo/Structuring.pm line 27. BEGIN failed--compilation aborted at /usr/share/texinfo/Texinfo/Structuring.pm line 27. Compilation failed in require at /usr/share/texinfo/Texinfo/Convert/Converter.pm line 32. BEGIN failed--compilation aborted at /usr/share/texinfo/Texinfo/Convert/Converter.pm line 32. Compilation failed in require at /usr/bin/makeinfo line 99. BEGIN failed--compilation aborted at /usr/bin/makeinfo line 99.
解决步骤:
重新安装Cygwin的Perl核心包
if.pm是Perl的核心模块,正常随Perl自带,找不到大概率是Perl安装不完整。打开Cygwin的安装程序(setup.exe),搜索perl,找到perl-base或perl-core这类核心包,选择重新安装;同时也可以搜索texinfo包,重新安装一遍,确保makeinfo的依赖都完整。用CPAN手动安装if模块
如果重新安装Perl没用,打开Cygwin终端执行以下命令:cpan install if第一次运行cpan会提示配置,直接按回车选默认配置即可,它会自动下载并安装if模块。
临时添加模块路径(备选)
先找到if.pm的位置,比如用find /usr/lib/perl5 -name if.pm命令查找,假设找到路径是/usr/lib/perl5/5.32/x86_64-cygwin-threads/if.pm,可以临时把这个目录加到Perl的模块搜索路径里:export PERL5LIB=/usr/lib/perl5/5.32/x86_64-cygwin-threads:$PERL5LIB这个方法仅临时生效,重启终端后需要重新执行,优先推荐前两种方法。
为什么你之前的方法没用:
- 更新Perl版本只是升级了Perl本身,但如果核心模块一开始就缺失,升级也补不上缺失的文件;
- 注释
Structuring.pm第27行的代码会导致后续依赖这个模块的逻辑出错,自然无法正常运行makeinfo。
内容的提问来源于stack exchange,提问作者advaneharshal
相关产品推荐
相关产品推荐

