【问题标题】:How do I make OS X 10.6 compile JSON::XS as 32-bit instead of 64-bit?如何让 OS X 10.6 将 JSON::XS 编译为 32 位而不是 64 位?
【发布时间】:2010-12-13 01:22:28
【问题描述】:

我在 OS X 10.5 下编译 Perl 5.10.1。它被编译为 32 位程序。我已经升级到 OS X 10.6。我的 Perl 5.10.1 版本继续正常工作,但我只是尝试编译 JSON::XS 并得到如下错误:

Can't load '/Users/cowens/.cpan/build/JSON-XS-2.26-clO6XX/blib/arch/auto/JSON/XS/XS.bundle' for module JSON::XS: dlopen(/Users/cowens/.cpan/build/JSON-XS-2.26-clO6XX/blib/arch/auto/JSON/XS/XS.bundle, 2): no suitable image found. Did find: /Users/cowens/.cpan/build/JSON-XS-2.26-clO6XX/blib/arch/auto/JSON/XS/XS.bundle: mach-o, but wrong architecture at /Users/cowens/local/lib/perl5/5.10.1/darwin-thread-multi-2level/DynaLoader.pm line 204.

快速查看/Users/cowens/.cpan/build/JSON-XS-2.26-clO6XX/blib/arch/auto/JSON/XS/XS.bundle 表明它确实是一个 64 位库:

/Users/cowens/.cpan/build/JSON-XS-2.26-clO6XX/blib/arch/auto/JSON/XS/XS.bundle:Mach-O 64 位捆绑包 x86_64

由于这很可能是罪魁祸首,我想尝试将模块编译为 32 位。我假设有一些环境变量(如CCFLAGS)我可以设置强制它编译为 32 位库而不是 64 位库。

替代方法似乎是重新编译 Perl 和我的所有模块(我不确定我是否想要这样做)。

【问题讨论】:

  • 我认为问题在于您使用的编译器与用于编译 Perl 的编译器不同。
  • 嗯,GCC 的升级版本可能是问题所在,但它正在生成 64 位版本的库这一事实绝对是一个问题(32 位程序无法加载 64-位库)。

标签: perl macos compilation 32bit-64bit


【解决方案1】:

确保您的系统 perl 不是 64 位的,并且您的 perl 副本没有加载该 64 位 perls 配置。您可以通过转储 %INC

来检查

【讨论】:

    【解决方案2】:

    如果您的 Perl 安装在 /usr/perl/v5.10.1 中,请尝试查看文件 /usr/perl/v5.10.1/lib/5.10.1/darwin-2level/Config.pm。其中应该有一个“cc”条目;仔细(先备份)将其从“cc”修改为“cc -m32”。尝试重建 JSON::XS。这样做会改变 Perl 对其配置的看法,并且“cc -m32”强制执行 32 位构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 2018-08-04
      • 2021-06-25
      • 1970-01-01
      • 2012-11-19
      • 2021-05-18
      • 1970-01-01
      相关资源
      最近更新 更多