【问题标题】:Cygwin hangs on Perl script: Nothing seems to fixCygwin 挂在 Perl 脚本上:似乎没有任何问题可以解决
【发布时间】:2012-03-18 04:58:46
【问题描述】:

我正在运行 Windows 7 64 位,这似乎是问题的一部分。起初我的cpan 会在我尝试从 shell 提示符install CPAN 时挂起。

我尝试重新启动我的计算机,并尝试从ash 使用rebaseallpeflagsall - 甚至为 dll 启动一个新的基础(该命令是在 cygwin 邮件列表中建议的 - 类似于rebaseall -vb 0x730000)。

我应该卸载 Cygwin 并尝试完全重新安装吗?我拥有cpan 应该需要的所有依赖项(即gcc-4)。

我在这里变得非常绝望 - 如果我尝试使用从 CPAN 安装的模块(特别是 JSON::XS),我会收到有关失败 dll 的错误消息。

您能提供的任何帮助都很棒。

谢谢!

【问题讨论】:

  • 可以展示cpan交互吗?
  • 我在尝试install CPAN 时收到的错误消息显示100803213 [main] perl 5592 child_copy: loaded dll data write copy failed, 0x73241000..0x732427F0, done 0, windows pid 5636, Win32 error 487

标签: perl cygwin cpan


【解决方案1】:

我相信安装时抱怨缺少 dll 是一个已知的错误,并且出现在很多模块中。大多数模块仍然安装并且仍然可以工作。根据我的经验,您还需要强制安装大多数模块,因为几乎总是有一些测试失败。

虽然我个人更喜欢 cygwin 环境中的 perl,但安装 Strawberryperl 有一个很好的理由;需要 cygwin 不支持的 64 位支持。例如,如果您打算使用 XML::Simple 处理大型 XML 数据结构,那么 32 位 Windows 支持的 1.5-2GB 不会让您走得太远,Strawberryperl 会来救您。由于 perl 的可移植性,除了在同一台计算机上安装两套 perl 之外,使用 cygwin 进行开发,然后使用 64 位 Strawberryperl 在“生产环境”运行它是没有问题的。

【讨论】:

  • 太棒了。我希望我可以投票给你,但我还没有声望。 StrawberryPerl 是否允许我使用perl 从命令行执行脚本?我有一个独立于 Cygwin 安装的 wget 函数,它的工作原理是这样的。
  • 另外,如何改变在脚本开头使用#!/bin/perl 的传统做法,使它们可以从命令行直接执行?感谢您的宝贵时间。
  • 您在 Windows(Cygwin 之外)中执行脚本,方法是执行 perl myscriptname.pl 或类似操作(假设草莓在您的路径中,或者使用像 c:\strawberry\bin\perl.exe myscript.pl 这样的完整路径。Unix 风格的 hashbangs 可以不适用于 Windows(Cygwin 之外)。如果需要,您可以创建一个(DOS 样式)批处理文件 (.bat),为您调用 perl yourscript.pl,如果您的 perl 脚本不使用,可以选择更改目录和设置路径照顾这个本身。
【解决方案2】:

您是在安装cygwin,然后在此基础上构建 Perl 吗?如果您使用Strawberry Perl,您将获得更大的成功,它带有自己的 cygwin 环境,可以让您在需要时构建和安装大多数 CPAN 模块

【讨论】:

  • 我会调查的,谢谢。我使用了 Cygwin 的 setup.exe 中的 perlcpan 模块。
  • Strawberry Perl 有一套不错的 gnu 工具,但它与 Cygwin 环境完全不同。如果 OP 想要做的只是在 Windows 机器上运行 Perl,这是一个很好的解决方案。如果 OP 想从 Cygwin 运行 perl,这将无济于事。
【解决方案3】:

我怀疑您遇到的问题是常规 shell(通常是 bash 并在 Cygwin 上为您提供 $ 提示)和 cpan shell(将为您提供类似 cpan[1]> 的提示)之间的区别)。

在 cpan shell 中,install CPAN 将刷新 CPAN 存储库中的一堆 Perl 脚本。在 bash shell 中,install CPAN 没有任何意义:install 是一个用于安装您刚刚构建的软件包的程序;它与 Perl 或在 Cygwin 上安装软件包的方式无关。

您可以通过在 bash shell 提示符下运行 cpan 来进入 CPAN shell。但我认为这不是你需要的。您真正想要做的只是运行以下命令:

cpan JSON::XS

【讨论】:

  • 我一直在尝试从cpan shell 中执行install CPANinstall JSON::XS,这是我收到错误消息的地方(也看到了类似的错误消息试图运行一个 perl 脚本,当我以为我终于安装了这些模块时使用了这些模块)。抱歉,可能可以更清楚地说明这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2014-12-07
相关资源
最近更新 更多