我有cygwin和git。我正试图用git提交给svn - git svn dcommit
。但它失败了,出现了奇怪的错误:
$ git svn dcommit 4 [main] perl 5536 C:\cygwin\bin\perl.exe: *** fatal error - unable to remap \\?\C:\cygwin\lib\perl5\5.10\i686-cygwin\auto\List\Util\Util.dll to same address as parent: 0xA20000 != 0xB40000 Stack trace: Frame Function Args 0088B508 6102749B (0088B508, 00000000, 00000000, 00000000) 0088B7F8 6102749B (61177B80, 00008000, 00000000, 61179977) 0088C828 61004AFB (611A136C, 6125AB3C, 00A20000, 00B40000) End of stack trace
我该如何解决?感谢。
P.S。 我的系统是Windows 7 64位。
更新
reabase
有所帮助。但是我必须在执行rebase后重新启动。
答案 0 :(得分:19)
您是否尝试了rebaseall
之类的 described here ?
当您使用Cygwin时,有时您会收到类似
的错误
unable to remap some.dll to same address as parent someapp 4292 fork:
child 3964 - died waiting for dll loading, errno 11"
然后你需要运行rebaseall 为了运行它,关闭所有Cygwin窗口,执行
<cygwin_home>\bin\ash.exe
,它将打开一个新的控制台窗口
在那里执行rebaseall
一旦完成,您可以再次运行Cygwin而不会出现任何问题: - )
OP gor报告他必须重新启动以使rebaseall
正常工作
Dan Moulding在评论中提及:
我要补充说,关闭所有Cygwin窗口可能还不够 您应该确保所有Cygwin流程和服务都已终止和/或停止(来自
ps -a
的{{1}}除了ash
和ash
之外什么都不会显示在变基之前 。
有关为何需要此解释的说明,请参阅
fatal error - unable to remap to same address as parent
: Cygwin, Ruby on Rails, System calls那究竟发生了什么? 那么,在这种情况下,问题是Windows管理
ps
的方式的结果。Windows使用
.dll
(地址空间布局随机化)来管理其ASLR
。每次启动计算机时,它都会将您的dll加载到不同的内存区域 如果这出现问题,那么下次您查找.dll
时 - 可能会导致系统崩溃。或者,如果您在错误的地方看,可能会导致系统崩溃 那么这个系统怎么能摆脱困境呢?好吧,运行你的cygwin安装程序会影响记录保存,特别是如果.dll
已经改变但Cygwin正在保留旧版本(这可能在安装未完成时发生)。ASLR非常适合恶意软件或黑客防御。
ASLR尝试新地址。
答案 1 :(得分:13)
我遇到了这个问题,但运行rebaseall无法解决问题。我试图运行git svn dcommit并看到我提到的重映射错误,无论我运行rebaseall和/或重启多少次。
这是我看到的样本。请注意地址 0x6FA00000
的引用$ git svn dcommit致力于 844 [main] perl 1136 C:\ cygwin \ bin \ perl.exe: *致命 错误 - 无法重新映射 C:\ cygwin \ bin \ cygdb-4.5.dll改为相同 地址为父:0x58B40000!= ** 0x6FA00000 堆栈跟踪:帧
功能Args 0082B458 6102792B (0082B458,00000000,00000000, 00000000)0082B748 6102792B (6117DC60,00008000,00000000, 6117F977)0082C778 61004F3B (611A6FAC,61247BCC,58B40000, 6FA00000)堆栈跟踪结束 3 [主要] perl 4680 fork:孩子1136 - 等待dll加载死亡, errno 11
我认为这不重要,但我使用我公司的企业形象在Windows7 Enterprise 32位上运行。
我能够按照我在Chromium维基上找到的建议解决这个问题:
http://code.google.com/p/chromium/wiki/CygwinDllRemappingFailure
我使用来自cygwin的ListDlls.exe(http://technet.microsoft.com/en-us/sysinternals/bb896656.aspx)来捕获正在运行的进程中加载的DLL的输出,并为导致问题的地址进行grep'ed:
$ ./ListDlls.exe | tee foo
$ cat foo | grep 6fa000...
0x6fa00000 0x3c000 9.05.0005.9574 C:\ PROGRA~1 \ Sophos \ SOPHOS~1 \ SOPHOS~1.DLL
Sophos Security提供的DLL的匹配加载地址,默认情况下我的IT组在我们的计算机上运行,这是导致失败的原因。 rebaseall没有机会解决问题,因为Sophos提供的DLL不是cygwin的一部分。
Chromium维基说要选择一个小于导致问题的DLL的基地址,所以我选择 0x60000000 。您可能必须选择不同的基址,具体取决于您可能会看到的违规DLL。
我从cmd.exe提示符重新进行rebaseall,并且没有其他cygwin进程在运行。
c:\ cygwin \ bin&gt; ash / usr / bin / rebaseall -b 0x60000000
重新启动我的cygwin shell后,git svn dcommit工作。
答案 2 :(得分:4)
面对类似的问题,直到我跑步它都没有发挥作用 rebaseall 2. perlrebase 3. peflagsall
运行它们以解决问题
答案 3 :(得分:1)
上述答案并没有为我们的团队在64位Windows(Windows 7)上运行cygwin git的问题提供可靠的解决方案。我在git邮件中发布了一个问题,得到了Pascal Obry的回复:
乔,
这是一个已知问题。我已经很久没有离开Windows世界了 我还有一些注意事项要“修复”这个:
从ash shell(确保没有Cygwin进程仍在运行):
$ rebaseall
$ peflagsall
再次尝试你的命令。如果仍然无效,请尝试:$ rebaseall -b 0x50000000 -o 0x80000或-b 0xNNNN0000其中NNNN是任意的 十六进制数介于2000和7000之间。-o选项告诉更多 在dll之间的空间,它也可能有所帮助。它确实在我的情况下。
如果您好奇,请查看/usr/share/doc/Cygwin/rebase-3.0.README 有关更多解释。
另请参阅:http://www.spinics.net/lists/git/msg183753.html
Pascal还在后续文章中指出:......最重要的部分是运行peflagsall,这是通往的方式 在Win7 IIRC上正确修复。
最初但非确定的结果表明此解决方案比此处记录的其他建议更好。我将在一周左右的时间内更新这篇文章,以表明此配方是否足以获得永久可靠的解决方案。