cygwin下的perl.exe重映射错误

时间:2011-08-01 16:12:47

标签: perl cygwin

My 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

我按照建议here尝试运行rebase,但问题仍然存在。任何答案都赞赏,因为我明天有一个需要这个脚本的演示。不要指望这样的问题!

2 个答案:

答案 0 :(得分:3)

这是一个半知情的答案,因为我遇到了类似的困难,并最终徘徊,直到问题消失。

不带参数的

rebaseall将重新绑定从cygwin软件包安装的所有dll文件。但是,您经常会从其他已构建和安装的程序中获得许多其他dll,包括已安装的带有XS代码的Perl模块,您需要以某种方式告诉rebaseall这些模块。

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

  1. 获取系统中运行在cygwin下的所有dll的列表。也许像find /bin /lib /usr /home -name \*.dll > /tmp/file1
  2. 之类的东西
  3. 退出所有cygwin进程,从Windows命令提示符打开ashdash shell,然后运行/bin/rebaseall -v > /tmp/file2-v开关在rebase中设置了一个详细标记,列出了使用默认设置进行重新定位的所有文件。
  4. 使用/tmp/file1/tmp/file2创建一个新文件,例如/tmp/file3,其中包含您要修改的完整文件列表。根据我的记忆,首先列出系统dll(/tmp/file2中的所有文件)非常重要,
  5. 现在运行rebaseall -v -T /tmp/file3(关闭所有cygwin触发器后等等)。注意输出。如果有关于重新定位某个特定dll的错误消息,请从/tmp/file3中删除该条目,然后重试。
  6. 这可能无法解决您的问题,但也许它可以帮助您解决问题。如果你最终弄清楚了,我希望你会回来并填写这个解决方案中的一些漏洞。

答案 1 :(得分:0)

我认为有必要指出的是,对于大多数遇到此问题的人而言,没有任何论据的简单“rebaseall”似乎可以解决这个问题。我将发布一个链接到一个非常有用的博客文章,从我的生活,启动(我与该博客没有关系):

http://www.mylifestartingup.com/2009/04/fatal-error-unable-to-remap-to-same.html

动作列表(直接从博客中复制)是:

  

如果您不关心实际发生的事情,请告诉您如何做。

     

1)关闭Cygwin(和所有cygwin进程)。

     

2)打开Windows命令提示符(开始 - >运行 - >键入'cmd'或在vista:start - >在开始搜索窗口中键入'cmd')

     

3)转到cygwin bin目录。对我来说,它是c:\ cygwin \ bin。

     

4)输入灰

     

5)输入'/ usr / bin / rebaseall'

     

6)解决任何错误(我有一个未解决的警告但它仍然正常工作)

     

7)重新启动...你应该很好。

如果你关心实际发生了什么,请阅读博客文章,除了暴徒在这个问题上的回答。