Моята Cygwin среда (Windows 7 O / S) е развила странен проблем. Преди няколко дни бях изпълнявал perl скрипт добре, но днес получавам
0 [main] perl 5056 C:cygwinbinperl.exe: *** fatal error - unable to remap \?C:cygwinlibperl
55.10i686-cygwinautoSocketSocket.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
Опитах да изпълня ребаза, както ви посъветвах тук но проблемът продължава. Всеки отговор оценявам, тъй като утре имам демо, за което е необходим този скрипт. Не очаквах проблем като този!
Отговори:
3 за отговор № 1Това е полу-информиран отговор, тъй като имах подобна трудност и накрая се развихрях, докато проблемът изчезне.
rebaseall
без аргументи ще преобърне всички dll
файлове, инсталирани от пакети на cygwin. Въпреки това често ще имате много други dlls от други програми, които сте изградили и инсталирали, включително от инсталирани Perl модули с XS код, и ще трябва да кажете rebaseall
някак си за тези модули.
Може да има по-лесен начин да направите това и се надявам, че не съм забравил никакви стъпки, но мисля, че имах някакъв успех да направя нещо подобно:
- Вземете списък на всички dll в системата ви, които се изпълняват под cygwin. Може би нещо подобно
find /bin /lib /usr /home -name *.dll > /tmp/file1
- излезте от всички cygwin процеси, отворете като
ash
илиdash
от командния ред на Windows и стартирайте/bin/rebaseall -v > /tmp/file2
, Най--v
Превключвателят задава флаг Verbose вrebase
който изброява всички файлове, които се презареждат с настройката по подразбиране. - употреба
/tmp/file1
и/tmp/file2
да създадете нов файл, да речем/tmp/file3
с пълния списък с файлове, които ще искате да ребаза. От това, което си спомням, това е важно за dlls на системата (всички файлове в/tmp/file2
) да бъдат изброени първо, - Сега тичай
rebaseall -v -T /tmp/file3
(в пепел, след затваряне на всички cygwin процеси и т.н.). Обърнете внимание на изхода. Ако има съобщения за грешки за преосмислянето на конкретна dll, премахнете този запис от/tmp/file3
и опитайте отново.
Това може да не реши проблема ви, но може би ще ви донесе по-голямата част от пътя. Ако в крайна сметка го разберете, надявам се да се върнете и да попълните някои от дупките в това решение.
0 за отговор № 2
Мисля, че е полезно да се отбележи това за повечетохората, които се впускат в това просто "rebaseall" без никакви аргументи изглежда да разреши този въпрос. Ще публикувам връзка към много полезен блог от My Life, Starting up (нямам връзка с този блог):
http://www.mylifestartingup.com/2009/04/fatal-error-unable-to-remap-to-same.html
Списъкът с действия (копиран директно от блога) е:
Нека ви кажа какво можете да направите, ако не се интересувате какво се случва.
1) Затворете Cygwin (и всички cygwin процеси).
2) Отворете командния ред на Windows (start -> run -> напишете "cmd" или във Vista: start -> напишете "cmd" в началния прозорец за търсене)
3) Отидете във вашата директория на bg cygwin. За мен това е c: cygwinbin.
4) Тип пепел
5) Въведете "/ usr / bin / rebaseall"
6) Разрешете всички грешки (имах предупреждение, което остава неразрешено и все още работи добре)
7) Рестартирайте ... и трябва да сте добри.
И ако се интересувате какво точно се случва, прочетете статията в блога, в допълнение към отговора на тълпата по този въпрос.