2013-06-03 2 views
6

32 비트 용으로 빌드 된 Perl 5.12.5의 맞춤형 버전을 실행하는 64 비트 CentOS 6 시스템이 있습니다. (아아, 이것은 32 비트 및 64 비트 시스템에서 동일한 RPM을 사용하기 때문입니다.)64 비트 CentOS 시스템에서 32 비트 사용자 정의 Perl 용 32 비트 XS 모듈을 작성하려면 어떻게합니까?

서버에서 XS 모듈 (예 : JSON :: XS)을 빌드하면 서버가 64 비트 시스템이므로, bit 라이브러리. 나는 "-m32 비트"하지만이 작동하지 않을 수있는 CFLAGS 변수를 설정하려고했습니다

Can't load '.cpanm/work/1370279501.28897/JSON-XS-2.33/blib/arch 
/auto/JSON/XS/XS.so' for module JSON::XS: .cpanm/work/137027950 
1.28897/JSON-XS-2.33/blib/arch/auto/JSON/XS/XS.so: wrong ELF class: ELFCLASS64 
at /opt/perl/lib/5.12.5/i686-linux/DynaLoader.pm line 200. 

같은 오류가 발생합니다.

XS 모듈을 올바르게 컴파일하려면 어떻게해야합니까? 이상적으로, 나는 cpanminus와 함께 작동하지만 필요하다면 cpan이나 cpanplus를 사용할 수있는 것을 원합니다.

+0

홀수를. Perl을 빌드 할 때 사용한 것과 동일한 설정을 사용해야합니다. – ikegami

+0

@ikegami Perl은 32 비트 시스템을 기반으로하므로 설정을 명시 적으로 지정할 필요가 없습니다. – Rob

+0

문제를 해결하기 위해 깨진 Perl을 수정하십시오 (즉, 올바르게 설치하십시오). – ikegami

답변

2

Perl의 빌드 시스템 (특히 ExtUtils :: MakeMaker 및 ExtUtils :: CBuilder)은 해당 perl을 빌드하는 데 사용 된 컴파일 플랫폼이 사용 가능한 런타임 플랫폼이라고 가정합니다. 분명히 여기에 해당되지 않습니다.

명백한 해결책은 두 툴체인 모두에서 동일한 실행 파일을 생성하는 옵션으로 perl을 컴파일하는 것입니다. 이것은 다소 까다 롭습니다.

+0

그 옵션이 무엇일까요? – Rob

0

이 대답은 나를 위해 작동 밝혀 :

wwalker $ PERL_MM_OPT='CCFLAGS="-m32 -march=i686" LDDLFLAGS="-m32 -march=i686"' /opt/depot/perl-5.8.5/bin/perl -MCPAN -e shell 

cpan shell -- CPAN exploration and modules installation (v1.7601) 
ReadLine support enabled 

cpan> install DBIx::Class