2

我在 perlmonks 上问了这个问题,并且进展有限,所以我会在这里问。我使用 perlbrew 在 Mac OS X 10.7.5 上安装了 perl 5.16.0,线程化。现在,当我尝试将模块转移到新安装时,它会失败并显示一条我不理解的消息。以下是我使用和输出的命令。

$ perlbrew install --as perl-5.16.0t -Dusethreads perl-5.16.0

然后,按照关于 perlmonks 的帖子:

$ perldoc -t perllocal | perl -lane'/"Module"/ && print $F[-1]' | sort -u >/tmp/pms

$ perlbrew switch perl-5.16.0t

$ cpanm -v </tmp/pms &>>/tmp/inst.log & tail -f /tmp/inst.log

然后我尝试了这些命令作为一个简单的检查,并得到了我无法理解的输出:

$ perl -e 1 -MFile::Find
  dyld: lazy symbol binding failed: Symbol not found: _Perl_Istack_sp_ptr
  Referenced from: /Users/abualiga/perl5/lib/perl5/darwin-thread-multi-2level/auto/Cwd/Cwd.bundle
  Expected in: flat namespace

  dyld: Symbol not found: _Perl_Istack_sp_ptr
  Referenced from: /Users/abualiga/perl5/lib/perl5/darwin-thread-multi-2level/auto/Cwd/Cwd.bundle
  Expected in: flat namespace

  Trace/BPT trap: 5

$ perldoc File::Find
  dyld: lazy symbol binding failed: Symbol not found: _Perl_Istack_sp_ptr
  Referenced from: /Users/abualiga/perl5/lib/perl5/darwin-thread-multi-2level/auto/Cwd/Cwd.bundle
  Expected in: flat namespace

  dyld: Symbol not found: _Perl_Istack_sp_ptr
  Referenced from: /Users/abualiga/perl5/lib/perl5/darwin-thread-multi-2level/auto/Cwd/Cwd.bundle
  Expected in: flat namespace

  Trace/BPT trap: 5

我卸载了 perl-5.16.0t 并删除了文件夹 perlbrew 和 .bash_profile 中的行,所以现在我回到了系统 perl 5.12.3。不过,我想知道如何做到这一点,在我的主目录中有多个 perls,而不必使用 ActiveState。

4

1 回答 1

0

您是否在默认目录(perl5/perlbrew)中使用默认设置安装了 perlbrew?重新安装 perlbrew 并切换到您喜欢的 perl 并检查以下内容:

首先,你在 perlbrew 中安装了 cpanm 吗?“which cpanm”会告诉你你正在使用哪一个。它应该位于路径以“perlbrew/bin”结尾的目录中。如果没有,你可以安装它

perlbrew install-cpanm

此外,您的 bash_profile 中的行是否类似于“source ~/perl5/perlbrew/etc/bashrc”?它是该 perlbrew bashrc 文件的正确路径吗?编辑 bash_profile 后是否重新启动了终端?你的@INC 里有什么?去检查:

perl -e 'print join "\n", @INC'

如果 perlbrew 安装正确,@INC 中应该只有 perlbrew 目录的子目录。

从您的错误消息来看,perlbrew perl 似乎正在寻找该模块并找到一个针对位于“/Users/abualiga/perl5/lib”中的另一个 perl 构建的模块,该模块不兼容。Perlbrew perl 的模块通常位于“~/perl5/ perlbrew /perls/perl-5.16.3/lib”之类的地方。这意味着您没有为您正在使用的特定 perlbrew perl 正确安装这些模块,或者路径/@INC 有问题。如果是后者,则 perlbrew bashrc 脚本有问题(我知道他们修复了 perlbrew的最新版本 - 0.61 中的错误)。但是,如果您没有以默认方式安装 perlbrew,那么您可能需要自己修复路径。

此外,将来,如果您想在使用 perlbrew 安装的不同 perls 之间传输模块,这些说明可能会有所帮助。

于 2013-04-03T21:05:09.890 回答