cpan을 이용하여 XML 관련 Perl 모듈을 설치하다보면 XML::Parser 모듈에 대한 의존성 때문에 XML::Parser 모듈부터 먼저 설치를 하는 경우가 종종 있다.
그런데, CentOS Linx와 같은 일부 시스템에서는 XML 관련 시스템 라이브러리의 미 설치 때문에 XML::Parser 모듈을 설치하는 과정에서 오류가 발생할 수 있다. 원인은 바로 expat-devel 패키지 때문이다. 이 패키지 안에 포함되어 있는 expat.h가 없어서 발생한 일이다.
perl /usr/local/lib/perl5/5.14.2/ExtUtils/xsubpp -noprototypes -typemap /usr/local/lib/perl5/5.14.2/ExtUtils/typemap -typemap typemap Expat.xs > Expat.xsc && mv Expat.xsc Expat.c
cc -c -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -DVERSION=\\"2.41\\" -DXS_VERSION=\\"2.41\\" -fPIC "-I/usr/local/lib/perl5/5.14.2/x86_64-linux/CORE" Expat.c
Expat.xs:12:19: error: expat.h: No such file or directory
Expat.xs:12:19: error: expat.h: 그런 파일이나 디렉토리가 없음
Expat.xs:60: error: expected specifier-qualifier-list before 'XML_Parser'
Expat.xs:111: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'nsdelim'
Expat.xs:194: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ms'
Expat.xs:197: error: expected ')' before 'parser'
Expat.xs:249: error: expected ')' before '*' token
Expat.xs:286: error: expected ')' before 'parser'
Expat.xs: In function 'characterData':
root 권한으로 다음의 명령을 실행한다.
sudo yum install expat-devel
CentOS가 아닌 다른 리눅스의 경우에도 yum 대신 apt 등의 패키지 관리 프로그램을 이용하여 expat-devel 패키지를 설치하면 된다. (expat-devel은 RPM 형태의 패키지로 리눅스에서는 범용적인 패키지임)
Ubuntu의 경우,
sudo apt install libexpat1-dev
이제 다시 cpan으로 XML::Parser 모듈을 설치하면 잘 설치된다.
cpan -i XML::Parser