在 Mac OSX 上安装 JSON::XS

Posted

技术标签:

【中文标题】在 Mac OSX 上安装 JSON::XS【英文标题】:Installing JSON::XS on Mac OSX 【发布时间】:2012-10-03 23:02:47 【问题描述】:

我希望你们都准备好迎接我的挫折:

我在 Mac OSX 上使用 Perl 5.10: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.

我在网上查了一下,虽然我明白它为什么这么说,但我看不出有什么办法可以解决这个问题,因为这些是从 cpan 或其他地方获得的 Makefile。

另一部分:

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 跑步到将山羊献祭给太阳神。如有任何帮助,我将不胜感激。

【问题讨论】:

'YAML' not installed, will not store persistent state 是无害的。) 你从perl -MExtUtils::CBuilder -E'say ExtUtils::CBuilder->new->have_compiler || 0'得到什么? (可能会创建一些文件) 来自 perlmonks 线程:我检查过,我确实有 BSD Subsystem。我还查了一下,发现我确实有make,而且cpan可以找到它。我还尝试删除以前的版本。没有任何帮助。 @ikegami我执行了,打印输出超过了字符限制,但有一部分说:ld: library not found for -lbundle1.olipo: 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 的大量调用 【参考方案1】:

您最好别管系统的perl。相反,请使用perlbrew 安装您自己的perls。

你可以安装cpanm而不使用cpan使用

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

为您当地的perl

此外,您可能需要安装command line tools for XCode。

如果不能,您可能需要考虑从 MacPorts 安装构建工具,并将它们放在系统路径之前的路径中,但在本地 perl 之后,因为您不一定想搞砸带有perl,MacPorts 也可以安装。

【讨论】:

+1 用于安装命令行工具。我以前也遇到过这个问题,如果这里也有问题,我不会感到惊讶。 @SinanÜnür 我基本上已经将问题归结为系统无法找到工作的 c 编译器。我有 gcc-4.2.1,但由于某种原因它找不到/使用它。当我尝试使用 perlbrew 安装时,它告诉我ld: library not found for -lcrt1.10.6.o。通过搜索我的电脑,我确实在/Developer/SDKs/MacOSX10.6.sdk/usr/lib/ 找到了一个文件crt1.10.6.o。我不知道如何使它对编译器可见,因为我无法访问 makefile。 您是否为您的 XCode 版本安装了 XCode 命令行工具? 是的。我有一个旧版本的 XCode,所以我找到的方向与我无关。但是,在我的 Developers 文件夹(安装了 XCode)中,usr/bin 包含从 makegcc 的所有内容。此外,这个文件夹已经在我的$PATH上。 为什么在这里解释如何安装cpanm?

以上是关于在 Mac OSX 上安装 JSON::XS的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OSX 上安装 nginx

如何通过终端/CLI 在 Mac 机器上安装 OSX .provisionprofile?

在 Mac OSX 上安装 flite 时出错

在我的 Mac OsX 上安装 channelflow

缺少在 Mac OSX Lion/make 上安装 Qt

sh 如何在Mac OSX上安装和编译rsync