SW 개발

active perl 에 xml parser 올리기

. . . 2013. 7. 25. 13:45
반응형

이슈

perl 을 사용하는 관련 webpage 를 돌리는데.. perl 의 xml:parser 모듈을 요구하더라;;

즉, 크로스 컴파일 perl 환경에서 xml parser 를 라이브러리를 돌려야한다.


XML::Parser 구하기

perl xml parser는 다음의 url 에서 구할 수 있다.

http://search.cpan.org/~msergeant/XML-Parser-2.36/


소스를 다운받아서 readme 를 읽어보면 perl 스크립트로 되어있는 Makefile.PL 를 실행한후에 make 로 컴파일을 해야하더라;;;

근데 크로스 컴파일 환경에서 돌려야하는데 host pc 에서 make / make install 은 좀 무리가 있는것 같다.


그래서 직접 perl 컴파일시에 xml::parser 가 들어가도록 한다.


perl 컴파일시에 XML::Parser 넣기

[OS/Linux >> Kernel] - active perl 을 크로스 컴파일하기


크로스 컴파일된 환경에서 라이브러리 넣기 힘드니 위의 내용대로 컴파일을 할때 xml::parser 를 넣기로 한다.


다운받은 xml parser 소스코드를 다음의 경로 밑에 넣는다.


perl-5.16.3/cpan/xml-parser


그런다음 컴파일 과정을 돌리면...

다음과 같은 error 를 뿜는다.


cd cpan/xml-parser/ && ../../miniperl_top -I../../lib Makefile.PL \

         INSTALLDIRS=perl INSTALLMAN1DIR=none INSTALLMAN3DIR=none \

         PERL_CORE=1 LIBPERL_A=libperl.a PERL_CORE=1 PERL="../../miniperl_top"

/...생략..../arm-linux/bin/ld: cannot find -lexpat

collect2: ld returned 1 exit status

Note (probably harmless): No library found for -lexpat


Expat must be installed prior to building XML::Parser and I can't find

it in the standard library directories. You can download expat from:


http://sourceforge.net/projects/expat/


If expat is installed, but in a non-standard directory, then use the

following options to Makefile.PL:


    EXPATLIBPATH=...  To set the directory in which to find libexpat


    EXPATINCPATH=...  To set the directory in which to find expat.h


For example:


    perl Makefile.PL EXPATLIBPATH=/home/me/lib EXPATINCPATH=/home/me/include


Note that if you build against a shareable library in a non-standard location

you may (on some platforms) also have to set your LD_LIBRARY_PATH environment

variable at run time for perl to find the library.


make: *** [cpan/xml-parser/Makefile] 오류 2


혹시나 위의 옵션말고 이상한 옵션을 뿜고 멈추는 경우도 많다

그럴때는 완전히 소스를 다 지우고 새로 하면된다. (가끔 Makefile.PL 을 하는과정에서 오류가 나는데 잘 안고쳐졌다 ㅠㅠ)


expat 라이브러리가 필요한것 같음


[OS/Linux >> Kernel] - xml parser library : expat 크로스 컴파일하기


위대로 컴파일한다음에...

xml::parser 소스의 Makefile.PL 을 수정한다.


   1 use 5.004;

   2 use ExtUtils::MakeMaker;

   3 use Config;

   4

   5 $expat_libpath = 'expat library Path...';

   6 $expat_incpath = 'expat include Path';

   7

   8 my @replacement_args;

   9


위의 두라인을 크로스 컴파일한 expat 의 lib / inc path로 수정한다.

그다음엔 다음과 같은 에러가 발생

xenostudy@생략/perl-5.16.3$ make
cd cpan/xml-parser/ && ../../miniperl_top -I../../lib Makefile.PL \
         INSTALLDIRS=perl INSTALLMAN1DIR=none INSTALLMAN3DIR=none \
         PERL_CORE=1 LIBPERL_A=libperl.a PERL_CORE=1 PERL="../../miniperl_top"
Checking if your kit is complete...
Looks good
Warning: prerequisite LWP 0 not found.
ERROR from evaluation of //... 생략.../perl-5.16.3/cpan/xml-parser/Expat/Makefile.PL: Can't locate Tie/Hash/NamedCapture.pm in @INC (@INC contains: 
//... 생략...
5.16.3/lib/English.pm line 148.
Compilation failed in require at ./Makefile.PL line 3.
BEGIN failed--compilation aborted at ./Makefile.PL line 3.
make: *** [cpan/xml-parser/Makefile] 오류 2



일단 Makefile.PL 에서 해당 오류부분 삭제

cpan/xml-parser/Expat/Makefile.PL

 1 use ExtUtils::MakeMaker;
 2 use Config;
 3 #use English;


위처럼 수정하니 make 성공!!!

실제로 Perl 안에 make install 했을때 XML::parser 가 들어갔는지 보면...

./output_bin/usr/lib/perl5/5.16.3/arm-linux/Pod/Simple/DumpAsXML.pm
./output_bin/usr/lib/perl5/5.16.3/arm-linux/Pod/Simple/XMLOutStream.pm
./output_bin/usr/lib/perl5/5.16.3/arm-linux/auto/XML
./output_bin/usr/lib/perl5/XML


위처럼되어있고..
실제 안에들어있는 파일들을 보면...

output_bin/usr/lib/perl5/5.16.3/arm-linux/auto/XML/Parser/Expat## > readelf -h Expat.so
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            ARM
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x24d0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          89568 (bytes into file)
  Flags:                             0x202, has entry point, GNU EABI, software FP
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         3
  Size of section headers:           40 (bytes)
  Number of section headers:         29
  Section header string table index: 26


ㅋㅋ 성공


반응형