2011-08-01 28 views
3

我的Cygwin環境(Windows 7 O/S)開發了一個奇怪的問題。幾天以前,我運行一個Perl腳本罰款,但今天我得到cygwin下的perl.exe重新映射錯誤

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,但問題仍然存在。任何答案的讚賞,因爲我有明天的演示,需要這個腳本。沒有期待這樣的問題!

+1

你重新啓動了這個系統嗎? –

+0

你有任何其他版本的PERL(例如,Windows本地)版本在運行嗎?如果事情真的很糟糕,請嘗試使用不同的版本,比如Strawberry PERL:http://stackoverflow.com/questions/463947/how-can-i-modify-my-cygwin-environment-to-use-strawberry-perl-而不是裝箱 – davidosomething

+0

奧卡姆剃刀再次襲擊。最後重新開機排序。難道你不喜歡Windows :) –

回答

3

這是一個半知情的答案,因爲我有類似的困難,並最終在問題消失之前徘徊。

rebaseall沒有參數將重新綁定從cygwin包安裝的所有dll文件。但是,您經常會從其他已經構建和安裝的程序中獲得許多其他DLL,包括使用XS代碼安裝的Perl模塊,您需要以某種方式告知rebaseall這些模塊。

有可能做到這一點更簡單的方法,我希望我沒有忘記任何步驟,但我覺得我有一些成功做這樣的事情:

  1. 獲取所有DLL的列表在cygwin下運行的系統中。也許像find /bin /lib /usr /home -name \*.dll > /tmp/file1
  2. 退出所有cygwin進程,從Windows命令提示符打開爲ashdash shell,然後運行/bin/rebaseall -v > /tmp/file2-v交換機在rebase中設置詳細標誌,該標誌列出了使用默認設置重新綁定的所有文件。
  3. 使用/tmp/file1/tmp/file2來創建一個新文件,比如/tmp/file3,其中包含您希望重新綁定的文件的完整列表。從我記得的系統DLL(/tmp/file2中的所有文件)首先被列出是很重要的,
  4. 現在運行rebaseall -v -T /tmp/file3(在關閉所有cygwin過程之後灰等)。注意輸出。如果有關於重新綁定某個特定dll的錯誤消息,請從/tmp/file3中刪除該條目,然後重試。

這可能無法解決您的問題,但它可能會爲您帶來最大的方式。如果你最終搞清楚了,我希望你會回來並填補這個解決方案中的一些漏洞。

+0

哦,我的上帝,這太可怕了。我一直在使用Unix系統多年,從未遇到過這個問題。來吧,我以前從未在cygwin上看過它。你的回答很有意義,但聽起來像是一個完整的解決方案。這是解決它的另一種方法http://code.google.com/p/chromium/wiki/CygwinDllRemappingFailure –

0

我認爲有必要指出,對於大多數遇到此問題的人來說,沒有任何參數的簡單「rebaseall」似乎可以解決此問題。我會發佈一個鏈接到我生命中的一個非常有用的博客文章,開始了(我沒有就該博客):

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

操作列表,(從博客直接複製)是:

讓我告訴你,如果你不關心實際發生的事情,你可以做什麼。 1)關閉Cygwin(以及所有的cygwin進程)。

2)打開Windows命令提示符(開始 - >運行 - >鍵入 'cmd' 或Vista:開始 - >在開始搜索窗口中鍵入 'cmd')

3)轉到您的cygwin斌目錄。對我來說,它是c:\ cygwin \ bin。

4)式灰

5)鍵入 '在/ usr/bin中/ rebaseall'

6)解決任何錯誤(我有去未解決的警告,它仍然運行良好)

7)重新啓動...你應該很好。

如果您關心實際發生的事情,請閱讀博客條目,除此之外,還有關於同一問題的暴徒的回答。

+0

每當我安裝CPAN模塊時,都會發生這種情況。 Perl在Cygwin上變得幾乎不可用(我花了很多時間編寫Perl腳本)。 – reinierpost