繁体   English   中英

如何在64位CentOS系统上为32位自定义Perl构建32位XS模块?

[英]How do I build 32-bit XS modules for a 32-bit custom Perl on a 64-bit CentOS system?

我有一个64位的CentOS 6系统,它运行一个定制版本的Perl 5.12.5,它是为32位构建的。 (唉,这是因为我们对32位和64位系统使用相同的RPM。)

当我在服务器上构建XS模块(例如JSON :: XS)时,它会失败,因为它正在构建64位库。 我得到一个错误

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.

我已经尝试将CFLAGS变量设置为“-m32-bit”但它不起作用。

如何正确编译XS模块需要做什么? 理想情况下,我喜欢与cpanminus一起使用的东西,但如果需要可以使用cpan或cpanplus。

Perl的构建系统(特别是ExtUtils :: MakeMaker和ExtUtils :: CBuilder)假定用于构建perl的编译平台也是可用的运行时平台。 显然,这不是这种情况。

显而易见的解决方案是使用可在两个工具链上生成相同可执行文件的选项编译perl。 这很棘手。

事实证明这个答案对我有用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM