2013-06-03 32 views
6

Tôi có hệ thống CentOS 6 64 bit chạy phiên bản Perl 5.12.5 được tạo tùy chỉnh, được xây dựng cho 32 bit. (Than ôi, điều này là do chúng tôi đang sử dụng cùng một RPM cho các hệ thống 32 bit và 64 bit.)Làm cách nào để tạo mô-đun XS 32 bit cho Perl tùy chỉnh 32 bit trên hệ thống CentOS 64 bit?

Khi tôi tạo mô-đun XS (ví dụ: JSON :: XS) trên máy chủ, không thành công vì nó đang xây dựng 64- thư viện bit. Tôi gặp lỗi như

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. 

Tôi đã thử đặt biến CFLAGS thành "-m32-bit" nhưng không hoạt động.

Tôi cần làm gì để biên dịch mô-đun XS đúng cách? Lý tưởng nhất, tôi muốn một cái gì đó mà làm việc với cpanminus nhưng có thể sử dụng cpan hoặc cpanplus nếu cần thiết.

+0

Odd. Nó nên sử dụng chính xác các cài đặt tương tự đã được sử dụng để xây dựng Perl. – ikegami

+0

@ikegami Perl được xây dựng trên máy 32 bit, vì vậy có lẽ cài đặt không cần phải được làm rõ ràng. – Rob

+0

Sửa lỗi Perl bị hỏng của bạn (tức là cài đặt đúng cách) để khắc phục sự cố của bạn. – ikegami

Trả lời

2

Hệ thống xây dựng của Perl (đặc biệt, ExtUtils :: MakeMaker và ExtUtils :: CBuilder) giả định nền tảng biên dịch được sử dụng để xây dựng perl đó cũng là nền tảng thời gian chạy có thể sử dụng. Rõ ràng đó không phải là trường hợp ở đây.

Giải pháp rõ ràng là biên dịch perl với các tùy chọn có thể dẫn đến cùng một tệp thực thi trên cả hai khung công cụ. Điều này khá phức tạp.

+0

Bất kỳ ý tưởng nào về các tùy chọn đó sẽ là gì? – Rob

0

Hóa ra câu trả lời này làm việc cho tôi:

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 
Các vấn đề liên quan