6

我有一个运行定制版本的 Perl 5.12.5 的 64 位 CentOS 6 系统,它是为 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 的东西。

4

2 回答 2

2

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

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

于 2013-06-05T09:59:56.167 回答
1

原来这个答案对我有用:

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
于 2015-12-21T00:17:09.303 回答