【问题标题】:How do I build 32-bit XS modules for a 32-bit custom Perl on a 64-bit CentOS system?如何在 64 位 CentOS 系统上为 32 位自定义 Perl 构建 32 位 XS 模块?
【发布时间】:2013-05-29 22:39:33
【问题描述】:

我有一个 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 完全相同的设置。
  • @ikegami Perl 是在 32 位机器上构建的,所以可能不需要明确设置。
  • 修复损坏的 Perl(即正确安装)以解决您的问题。
  • @ikegami 你能更具体一点吗?怎么没有正确安装?它在 PATH 中,PERL5LIB 变量设置正确,local-lib 变量设置正确。 CPAN 和 CPANPLUS 模块已正确配置并在 32 位系统上正常工作。
  • 您说您将它构建在与安装它的机器不同的机器上,但 perl 目前没有交叉编译器。

标签: perl xs makemaker


【解决方案1】:

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

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

【讨论】:

  • 知道这些选项是什么吗?
【解决方案2】:

原来这个答案对我有用:

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

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 2011-12-18
    • 2020-08-16
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多