이슈
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
xenostudy@생략/perl-5.16.3$ makecd 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 goodWarning: 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
1 use ExtUtils::MakeMaker;2 use Config;3 #use English;
./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.soELF Header:Magic: 7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00Class: ELF32Data: 2's complement, little endianVersion: 1 (current)OS/ABI: ARMABI Version: 0Type: DYN (Shared object file)Machine: ARMVersion: 0x1Entry point address: 0x24d0Start of program headers: 52 (bytes into file)Start of section headers: 89568 (bytes into file)Flags: 0x202, has entry point, GNU EABI, software FPSize of this header: 52 (bytes)Size of program headers: 32 (bytes)Number of program headers: 3Size of section headers: 40 (bytes)Number of section headers: 29Section header string table index: 26