我在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-bit bundle x86_64
由于这很可能是罪魁祸首,我想尝试将模块编译为32位.我假设有一些环境变量(如CCFLAGS)我可以设置强制它编译为32位库而不是64位库.
替代方案似乎是重新编译Perl和我的所有模块(我不确定我想做什么).
最佳答案 如果您的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位构建.