在Mac OSX上安装JSON::XS

6
我希望您已经准备好了,跟随我的挫败感一起进行漫长的冒险:
我正在使用Perl 5.10,在Mac OSX:Snow Leopard上,使用XCode 3.2.6。
我想做的是在程序中使用JSON::XS模块。
这是我第一次使用Perl,所以我查找了一些简单的示例程序并尝试了它们,它们都可以工作。然后我尝试使用JSON::XS。结果出现了以下错误信息:
Can't locate JSON/XS.pm in @INC (@INC contains: /Library/Perl/Updates/5.10.0 /System/Library/Perl/5.10.0/darwin-thread-multi-2level /System/Library/Perl/5.10.0 /Library/Perl/5.10.0/darwin-thread-multi-2level /Library/Perl/5.10.0 /Network/Library/Perl/5.10.0/darwin-thread-multi-2level /Network/Library/Perl/5.10.0 /Network/Library/Perl /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level /System/Library/Perl/Extras/5.10.0 .) at part1.pl line 5.
BEGIN failed--compilation aborted at part1.pl line 5.

我搜索了一些资料,发现需要进行安装。在我的搜索中,我发现强烈推荐使用cpanm。因此,我首先尝试使用已经安装的cpan来安装cpanm。

我得到了一个非常长的输出结果,基本上重复地说“不行,没有成功的机会”,并且一遍又一遍地显示“失败”。整个输出结果太长了,无法完全包含,但我觉得有趣的部分是:

Warning (usually harmless): 'YAML' not installed, will not store persistent state
Running make test
Can't test without successful make
Running make install
Make had returned bad status, install seems impossible
Could not read '/Users/danielgierl/.cpan/build/ExtUtils-ParseXS-3.15-VSmBrZ/META.yml'. Falling back to other methods to determine prerequisites

我查看了安装YAML的相关信息,因为像上面显示的部分(我一再得到)让我认为这可能是问题所在。实际上,它也失败了,并且在其他原因之间,给我了像上面那样的警告。

另一个输出部分如下:

make: *** No rule to make target `/System/Library/Perl/5.10.0/darwin-thread-multi-2level/CORE/config.h', needed by `Makefile'.  Stop.

我在网上查找了这个问题,虽然我理解为什么会出现这种情况,但是我看不到任何解决方法,因为这些Makefile文件是从CPAN或其他地方获取的。

另一个部分:

Running install for module 'version'
Running make for J/JP/JPEACOCK/version-0.9901.tar.gz
Has already been unwrapped into directory /Users/danielgierl/.cpan/build/version-0.9901-U8IMPt
Could not make: Unknown error
Warning (usually harmless): 'YAML' not installed, will not store persistent state
Running make test
Can't test without successful make
Running make install
Make had returned bad status, install seems impossible

一般说来,有许多未知的错误。我也被其中告诉我的部分所困扰:

Testing if you have a C compiler
ld: library not found for -lbundle1.o
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/1C/1CnzBuv+F5y+8M5YPm6I4k+++TI/-Tmp-//ccTWRqov.out (No such file or directory)
error building /var/folders/1C/1CnzBuv+F5y+8M5YPm6I4k+++TI/-Tmp-/compilet.bundle from /var/folders/1C/1CnzBuv+F5y+8M5YPm6I4k+++TI/-Tmp-/compilet.o at /System/Library/Perl/5.10.0/ExtUtils/CBuilder/Base.pm line 213.

I cannot determine if you have a C compiler
so I will install a perl-only implementation

You can force installation of the XS version with

perl Makefile.PL --xs

我知道我的电脑上有C编译器,因为gcc -v告诉我它是4.2.1版本。好的一面是,它告诉我我的工具包看起来不错(虽然我不知道那是什么)。如果我尝试运行推荐给我的命令,会发现没有这样的文件或目录。
经过更多的搜索,我发现Mac用户需要安装XCode。我已经安装了一个版本的XCode,但由于可能存在问题,我将其卸载,然后获取了3.2.6版本(我的操作系统太旧了不能安装更新版本)。安装失败了,原因未知,然后提示我联系软件公司。但是,在失败之前,它确实安装了UNIX工具,包括gcc(稍后我获取了最新版本),所以我认为这不是问题所在。
总之,这耗费了我今天大约6小时的时间,我很紧张,身体也不舒服(虽然我今天早上开始这个徒劳的尝试之前就已经不舒服了,但它变得更加严重了),我不知道下一步该怎么做。
我希望这一切只是一些愚蠢的错误,有经验的用户只需10秒钟即可纠正,但我担心最坏的情况。总的来说,我已经按照所有找到的建议去尝试了,从使用--sudo运行到向太阳神献祭。我会感激任何帮助。

1
"'YAML'未安装,不会存储持久状态"是无害的。 - ikegami
perl -MExtUtils::CBuilder -E'say ExtUtils::CBuilder->new->have_compiler || 0' 得到什么?(可能会创建一些文件) - ikegami
从Perlmonks论坛中:我检查了一下,我确实有“BSD子系统”。我也检查了一下发现我有“make”,并且cpan能够找到它。我还尝试删除以前的构建,但没有帮助。 - user1718471
@ikegami 我执行了它,打印输出超过了字符限制,但其中一部分说:“ld: library not found for -lbundle1.o”和“lipo: can't open input file: /var/folders/1C/1CnzBuv+F5y+8M5YPm6I4k+++TI/-Tmp-//ccEuKahH.out (No such file or directory)”。它返回了0。其余部分似乎是对gcc-4.2env LD_RUN_PATH的大量调用。 - user1718471
1个回答

6
最好不要动系统自带的 perl。相反,使用 perlbrew 安装自己的 perl
您可以使用以下方法安装cpanm而不使用cpan

curl -L http://cpanmin.us | perl - App::cpanminus

这是为本地 perl 安装的。
此外,您可能需要安装XCode 的命令行工具
如果您无法安装它们,可以考虑从MacPorts安装构建工具,并将它们放在路径中,在本地 perl 之后,但在系统路径之前,因为您不一定想同时干扰 MacPorts 安装的 perl

3
安装命令行工具会得到一个赞。我之前也遇到过这个问题,如果这里也是这个问题的话,我不会感到惊讶。 - Joel Berger
@SinanÜnür 我基本上已经追踪到问题所在,系统无法找到可用的C编译器。我有gcc-4.2.1,但由于某种原因它无法找到它/使用它。当我尝试使用perlbrew安装时,它告诉我ld:library not found for -lcrt1.10.6.o。通过搜索我的计算机,我发现了一个名为crt1.10.6.o的文件,位于/Developer/SDKs/MacOSX10.6.sdk/usr/lib/。由于我无法访问makefile,我不知道如何使其对编译器可见。 - user1718471
你是否已经为你的XCode版本安装了XCode命令行工具? - Sinan Ünür
你为什么要在这里解释如何安装cpanm? - MichielB
谢谢,漏看了,你是对的。我有点困惑,因为问题是“我如何安装JSON :: XS”,对我来说似乎与此无关。我没有注意到…… - MichielB
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接