新装了centos7,安装perl模块时,发现系统自带的perl很多基础的包都没安装(是基础perl的阉割版本,甚至失去了很多重要的基础包 http://www.perlmonks.org/?node_id=486526),比如 ExtUtils::MakeMaker,ExtUtils::ParseXS,ExtUtils::Embed等很多基础包都没有,因为自己熟知自定perl包的安装方法,所以很装逼的就把这些包及其依赖包装上了,但发现最后依然报错如下:
[root@localhost HTML-Parser-3.72]# perl Makefile.PL INSTALL_BASE=/share/soft/perl_lib
Checking if your kit is complete...
Looks good
Generating a Unix-style Makefile
Writing Makefile for HTML::Parser
Writing MYMETA.yml and MYMETA.json
[root@localhost HTML-Parser-3.72]# make
cp lib/HTML/PullParser.pm blib/lib/HTML/PullParser.pm
cp lib/HTML/Entities.pm blib/lib/HTML/Entities.pm
cp Parser.pm blib/lib/HTML/Parser.pm
cp lib/HTML/TokeParser.pm blib/lib/HTML/TokeParser.pm
cp lib/HTML/LinkExtor.pm blib/lib/HTML/LinkExtor.pm
cp lib/HTML/HeadParser.pm blib/lib/HTML/HeadParser.pm
cp lib/HTML/Filter.pm blib/lib/HTML/Filter.pm
Running Mkbootstrap for Parser ()
chmod 644 "Parser.bs"
"/usr/bin/perl" -MExtUtils::Command::MM -e 'cp_nonempty' -- Parser.bs blib/arch/auto/HTML/Parser/Parser.bs 644
"/usr/bin/perl" "/share/soft/perl_lib/lib/perl5/ExtUtils/xsubpp" -typemap '/usr/share/perl5/ExtUtils/typemap' -typemap '/share/soft_backup/HTML-Parser-3.72/typemap' Parser.xs > Parser.xsc
mv Parser.xsc Parser.c
"/usr/bin/perl" mkhctype >hctype.h
"/usr/bin/perl" mkpfunc >pfunc.h
gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -DVERSION=\"3.72\" -DXS_VERSION=\"3.72\" -fPIC "-I/usr/lib64/perl5/CORE" -DMARKED_SECTION Parser.c
Parser.xs:17:20: 致命错误:EXTERN.h:没有那个文件或目录
#include "EXTERN.h"
^
编译中断。
make: *** [Parser.o] 错误 1
就是找不到EXTERN.h头文件,如果你把这个头文件从其他地方拷过来(考到/usr/lib64/perl5/CORE 下),发现编译时还需要perl.h,config.h等一系列的头文件。所以对于这种阉割版的perl必须装perl-devel 或 perl-dev perl基础库:
centos 7 下安装方法:yum install perl-devel
装好后你会发现需要的EXTERN.h等头文件也有了,安装perl包(HTML::Parser)时的报错也解决了!
要解决这种问题,除了安装perl-devel 或 perl-dev perl基础库外,你也可以自己自定义安装一个perl(常规perl都包含这些基础库),以满足没有root权限的需要
参考:
http://www.magiclinux.org/bugs/view.php?id=143
http://www.perlmonks.org/?node_id=486526