2013-06-03 7 views
6

Possiedo un sistema CentOS 6 a 64 bit che esegue una versione personalizzata di Perl 5.12.5, creata per 32 bit. (Ahimè, questo è perché stiamo usando gli stessi RPM per i sistemi a 32 bit e 64 bit.)Come si creano moduli XS a 32 bit per un Perl personalizzato a 32 bit su un sistema CentOS a 64 bit?

Quando compongo i moduli XS (ad es. JSON :: XS) sul server, fallisce perché sta costruendo 64- librerie di bit. Ottengo un errore come

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. 

Ho provato a impostare la variabile CFLAGS a "-m32-bit", ma non funziona.

Cosa devo fare per compilare correttamente i moduli XS? Idealmente, mi piacerebbe qualcosa che funzioni con cpanminus ma, se necessario, può usare cpan o cpanplus.

+0

dispari. Dovrebbe usare le stesse identiche impostazioni utilizzate per costruire Perl. – ikegami

+0

@ikegami Il Perl è stato costruito su una macchina a 32 bit, quindi forse le impostazioni non hanno bisogno di essere esplicitate. – Rob

+0

Correggi il tuo Perl rotto (ad esempio installalo correttamente) per risolvere il tuo problema. – ikegami

risposta

2

Il sistema di compilazione di Perl (in particolare ExtUtils :: MakeMaker e ExtUtils :: CBuilder) presuppone la piattaforma di compilazione che è stata utilizzata per costruire il perl che è anche una piattaforma di runtime utilizzabile. Evidentemente non è questo il caso.

La soluzione ovvia è compilare perl con opzioni che risulterebbero negli stessi eseguibili su entrambi i toolchain. Questo è piuttosto difficile.

+0

Qualche idea di quali sarebbero queste opzioni? – Rob

0

Risulta questa risposta funziona per me:

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