在 cygwin 中安装 cpan 模块失败

Installing cpan Modules in cygwin fails

我正在尝试在 cygwin-32 位环境中安装来自 CPAN 的不同 Perl 模块,但总是出现相同类型的错误。这个来自尝试安装 Net::SSLeay,制作、安装并尝试强制安装,似乎没有任何效果。

drmariad@drmariad-MOBL ~/.cpan/build/Net-SSLeay-1.70-eDSzRW$ make install

Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
chmod 755 /usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int/auto//Net/SSLeay/SSLeay.dll
/bin/find /usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int/auto/ -xdev -name \*.dll /bin/rebase -sOT -
/bin/find: paths must precede expression: /bin/rebase
Usage: /bin/find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
Makefile:731: recipe for target 'pure_install' failed
make: *** [pure_install] Error 1

大多数时候我在安装时收到 bin/find 失败消息,但我不知道如何更改该行为。我尝试安装的大部分模块都出现错误和失败。

我最新的 Cygwin 附带

  • ExtUtils::MakeMaker6.57_05
  • ExtUtils::MM_Cygwin 6.57_07

出于某些原因这很奇怪,但我们关心的是 MM_Cygwin 的那个版本有问题。

sub install {
    my($self, %attribs) = @_;
    my $s = ExtUtils::MM_Unix::install($self, %attribs);
    return '' unless $s;
    return $s unless %{$self->{XS}};

    my $INSTALLDIRS = $self->{INSTALLDIRS};
    my $INSTALLLIB = $self->{"INSTALL". ($INSTALLDIRS eq 'perl' ? 'ARCHLIB' : uc($INSTALLDIRS)."ARCH")};
    my $dop = "$\(DESTDIR\)$INSTALLLIB/auto/";
    my $dll = "$dop/$self->{FULLEXT}/$self->{BASEEXT}.$self->{DLEXT}";
    $s =~ s|^(pure_install :: pure_$\(INSTALLDIRS\)_install\n\t)$\(NOECHO\) $\(NOOP\)\n|$(CHMOD) $(PERM_RWX) $dll\n\t/bin/find $dop -xdev -name \*.$self->{DLEXT} /bin/rebase -sOT -\n|m if (( $Config{myarchname} eq 'i686-cygwin') and not ( exists $ENV{CYGPORT_PACKAGE_VERSION} ));
    $s;
}

您可以将缺少的 | 添加到 /usr/lib/perl5/5.14/ExtUtils/MM_Cygwin.pm 作为快速永久修复。


或者,Cygwin 有一个名为 perl-ExtUtils-MakeMaker 的软件包,可将发行版升级到 7.04_01。

...除了错误仍然存​​在。如果你安装了这个包,要修复的文件是 /usr/lib/perl5/vendor_perl/5.14/ExtUtils/MM_Cygwin.pm.


或者,您可以将 ExtUtils::MakeMaker 升级到最新的开发版本(使用完全不同的命令)。

cpan B/BI/BINGOS/ExtUtils-MakeMaker-7.05_22.tar.gz