2013-06-03 22 views
6

32 bitlik bir yapıya sahip olan ve özel olarak üretilmiş Perl 5.12.5 sürümünü çalıştıran 64 bitlik bir CentOS 6 sistemim var. (Ne yazık ki, biz 32-bit ve 64-bit sistemler için aynı RPM kullanıyoruz.)64 bit CentOS sisteminde 32 bit özel Perl için 32 bit XS modülleri nasıl oluştururum?

Sunucuda XS modülleri (örneğin JSON :: XS) oluşturduğumda, 64 bit kitaplıkları. Ben "-m32 bit" ama çalışmıyor için CFLAGS değişkenini ayarlama denedim

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. 

gibi bir hata alıyorum.

XS modüllerini düzgün bir şekilde derlemek için ne yapmam gerekiyor? İdeal olarak, cpanminus ile çalışan bir şey isterdim, ancak gerekirse cpan veya cpanplus kullanabilir.

+0

Odd. Perl oluşturmak için kullanılan aynı ayarları kullanmalıdır. – ikegami

+0

@ikegami Perl, 32-bit bir makinede inşa edildi, bu yüzden ayarların açıkça yapılmasına gerek yoktu. – Rob

+0

Sorununuzu çözmek için bozuk Perl'inizi düzeltin (örn. Düzgün şekilde takın). – ikegami

cevap

2

Perl'in yapı sistemi (özellikle, ExtUtils :: MakeMaker ve ExtUtils :: CBuilder), perl'in de kullanılabilir çalışma zamanı platformunu oluşturmak için kullanılan derleme platformunu kabul eder. Açıkçası buradaki durum böyle değil.

Belirgin çözüm, her iki araçta aynı yürütülebilir dosyalara neden olacak seçeneklerle perl'i derlemektir. Bu oldukça zor.

+0

Bu seçeneklerin ne olacağı hakkında bir fikrin var mı? – Rob

0

Bu cevap benim için çalışıyor çıkıyor:

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