cygwin下perl.exe重映射错误

标签 perl cygwin

我的 Cygwin 环境 (Windows 7 O/S) 出现了一个奇怪的问题。几天前我还可以正常运行 perl 脚本,但今天我得到了

0 [main] perl 5056 C:\cygwin\bin\perl.exe: *** fatal error - unable to remap \\?\C:\cygwin\lib\perl
5\5.10\i686-cygwin\auto\Socket\Socket.dll to same address as parent: 0x8F0000 != 0x960000
Stack trace:
Frame     Function  Args
0088B508  6102749B  (0088B508, 00000000, 00000000, 00000000)
0088B7F8  6102749B  (61177B80, 00008000, 00000000, 61179977)
0088C828  61004AFB  (611A136C, 6123E0FC, 008F0000, 00960000)
End of stack trace

我尝试按照建议运行 rebase here但问题仍然存在。任何答案表示赞赏,因为我明天有一个演示需要这个脚本。没想到会出现这样的问题!

最佳答案

这是一个半知情的答案,因为我遇到过类似的困难并最终四处乱窜,直到问题消失。

不带参数的

rebaseall 将 rebase 所有从 cygwin 包安装的 dll 文件。然而,您通常会从您构建和安装的其他程序中获得许多其他 dll,包括使用 XS 代码安装的 Perl 模块,并且您需要以某种方式将这些模块告诉 rebaseall

可能有更简单的方法来做到这一点,我希望我没有忘记任何步骤,但我认为我在做这样的事情时取得了一些成功:

  1. 获取系统中在 cygwin 下运行的所有 dll 的列表。可能像 find/bin/lib/usr/home -name\*.dll >/tmp/file1
  2. 退出所有 cygwin 进程,在 Windows 命令提示符下以 ashdash shell 打开,然后运行 ​​/bin/rebaseall -v >/tmp/file2 -v 开关在 rebase 中设置了一个 Verbose 标志,该标志列出了使用默认设置重新设置基准的所有文件。
  3. 使用 /tmp/file1/tmp/file2 创建一个新文件,比如 /tmp/file3 包含完整的列表您将要 rebase 的文件。据我所知,首先列出系统 dll(/tmp/file2 中的所有文件)很重要,
  4. 现在运行 rebaseall -v -T/tmp/file3(在 ash 中,在关闭所有 cygwin 进程等之后)。注意输出。如果有关于 rebase 某些特定 dll 的错误消息,请从 /tmp/file3 中删除该条目,然后重试。

这可能无法解决您的问题,但也许可以帮助您解决大部分问题。如果您最终弄明白了,我希望您能回来填补这个解决方案中的一些漏洞。

关于cygwin下perl.exe重映射错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901274/

相关文章:

perl - perl 模块中的本地哈希初始化导致空哈希

bash - 我可以使用环境变量 %PROGRAMDATA% 吗?

python - 在 Python 脚本中获取 Cygwin 安装路径

perl - 我可以在 Perl 中创建类似 Java 的接口(interface)吗?

perl - Perl 中带有导出器的多个包

perl - SSH 与 Perl 使用文件句柄,而不是 Net::SSH

ruby - 在 cygwin 中安装 gem wdm 时出错

c - Winapi:获取具有特定文件句柄的进程

c - 扩展 Hello World 程序

regex - 如何检查 Perl 中的下一行是否为空白?