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



我有一个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位",但它不起作用。

我需要做什么才能正确编译XS模块?理想情况下,我想要一些与cppanminus一起工作的东西,但如果需要,可以使用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

相关内容

  • 没有找到相关文章

最新更新