2013-06-03 6 views
6

J'ai un système CentOS 6 64 bits qui exécute une version personnalisée de Perl 5.12.5, qui est construite pour 32 bits. (Hélas, c'est parce que nous utilisons les mêmes RPM pour les systèmes 32 bits et 64 bits.)Comment créer des modules XS 32 bits pour un Perl personnalisé 32 bits sur un système CentOS 64 bits?

Lorsque je crée des modules XS (par exemple JSON :: XS) sur le serveur, il échoue car il est en construction 64- bibliothèques de bits. Je reçois une erreur comme

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. 

J'ai essayé de placer la variable CFLAGS à « -m32 bits » mais il ne fonctionne pas.

Que dois-je faire pour compiler correctement les modules XS? Idéalement, j'aimerais quelque chose qui fonctionne avec cpanminus mais qui peut utiliser cpan ou cpanplus si besoin est.

+0

Odd. Il devrait utiliser exactement les mêmes paramètres que ceux utilisés pour construire Perl. – ikegami

+0

@ikegami Le Perl étant construit sur une machine 32 bits, il n'est peut-être pas nécessaire d'expliciter les paramètres. – Rob

+0

Réparer votre Perl cassé (c'est-à-dire l'installer correctement) pour résoudre votre problème. – ikegami

Répondre

2

Le système de construction de Perl (en particulier, ExtUtils :: MakeMaker et ExtUtils :: CBuilder) suppose que la plate-forme de compilation utilisée pour construire cette perl est également une plate-forme d'exécution utilisable. Évidemment, ce n'est pas le cas ici.

La solution évidente est de compiler perl avec des options qui aboutiraient aux mêmes exécutables sur les deux chaînes d'outils. C'est plutôt difficile.

+0

Une idée de ce que seraient ces options? – Rob

0

Transforme cette réponse fonctionne pour moi:

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 
Questions connexes