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

时间:2013-06-03 17:33:40

标签: perl xs makemaker

我有一个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。

1 个答案:

答案 0 :(得分:2)

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

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