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,但问题仍然存在。任何答案都赞赏,因为我明天有一个需要这个脚本的演示。不要指望这样的问题!
答案 0 :(得分:3)
这是一个半知情的答案,因为我遇到了类似的困难,并最终徘徊,直到问题消失。
不带参数的 rebaseall
将重新绑定从cygwin软件包安装的所有dll
文件。但是,您经常会从其他已构建和安装的程序中获得许多其他dll,包括已安装的带有XS代码的Perl模块,您需要以某种方式告诉rebaseall
这些模块。
可能有一种更简单的方法可以做到这一点,我希望我没有忘记任何步骤,但我认为我做了类似的事情取得了一些成功:
find /bin /lib /usr /home -name \*.dll > /tmp/file1
ash
或dash
shell,然后运行/bin/rebaseall -v > /tmp/file2
。 -v
开关在rebase
中设置了一个详细标记,列出了使用默认设置进行重新定位的所有文件。/tmp/file1
和/tmp/file2
创建一个新文件,例如/tmp/file3
,其中包含您要修改的完整文件列表。根据我的记忆,首先列出系统dll(/tmp/file2
中的所有文件)非常重要,rebaseall -v -T /tmp/file3
(关闭所有cygwin触发器后等等)。注意输出。如果有关于重新定位某个特定dll的错误消息,请从/tmp/file3
中删除该条目,然后重试。这可能无法解决您的问题,但也许它可以帮助您解决问题。如果你最终弄清楚了,我希望你会回来并填写这个解决方案中的一些漏洞。
答案 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)重新启动...你应该很好。
如果你关心实际发生了什么,请阅读博客文章,除了暴徒在这个问题上的回答。