2009-11-04 51 views
4

我在OS X 10.5下编译了Perl 5.10.1。它被编译为一个32位程序。我已经升级到OS X 10.6。我的Perl 5.10.1的版本继续正常工作,但我只是试图编译JSON :: XS和有像以下错误:如何让OS X 10.6将JSON :: XS编译为32位而不是64位?

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和我所有的模块(我不知道我想要做什么)。

+0

我认为问题在于您使用与编译Perl时使用的编译器不同的编译器编译它。 – 2009-11-04 15:19:33

+0

嗯,GCC的升级版本可能会成为问题,但是它生成64位版本的库肯定是一个问题(32位程序无法加载64位库)。 – 2009-11-04 16:10:46

回答

1

如果您的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位构建。

1

请确保您的系统perl不是64位,并且您的perl副本未加载该64位perls配置。您可以通过倾销%INC来检查INC