perl.exe ошибка переназначения под cygwin - PullRequest
3 голосов
/ 01 августа 2011

В моей среде 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

Я попытался запустить rebase, как советовали здесь , но проблема сохраняетсяЛюбые ответы приветствуются, так как у меня завтра демо, для которого нужен этот скрипт.Не ожидал такой проблемы!

Ответы [ 2 ]

3 голосов
/ 01 августа 2011

Это полуинформированный ответ, так как у меня возникли аналогичные трудности, и в конце концов он продолжал вращаться, пока проблема не исчезла.

rebaseall без аргументов перебазирует все файлы dll, которые былиустанавливается из пакетов cygwin.Однако у вас часто будет много других dll из других программ, которые вы создали и установили, в том числе из установленных модулей Perl с кодом XS, и вам нужно как-то рассказать rebaseall об этих модулях.

Может бытьболее простой способ сделать это, и я надеюсь, что я не забыл ни одного шага, но я думаю, что у меня был некоторый успех, делая что-то вроде этого:

  1. Получить список всех DLL в вашей системе, которые работаютпод Cygwin.Возможно, что-то вроде find /bin /lib /usr /home -name \*.dll > /tmp/file1
  2. выйдет из всех процессов cygwin, откроется как ash или dash shell из командной строки Windows и запустит /bin/rebaseall -v > /tmp/file2.Переключатель -v устанавливает флаг Verbose в rebase, который перечисляет все файлы, которые были перебазированы с настройкой по умолчанию.
  3. Используйте /tmp/file1 и /tmp/file2 для создания нового файла, скажем /tmp/file3с полным списком файлов, которые вы хотите перебазировать.Из того, что я помню, важно, чтобы системные dll (все файлы в /tmp/file2) были перечислены первыми,
  4. Теперь запустите rebaseall -v -T /tmp/file3 (в золе, после закрытия всех процедур cygwin и т. Д.).Обратите внимание на вывод.Если есть сообщения об ошибках при перебазировании некоторой конкретной библиотеки DLL, удалите эту запись из /tmp/file3 и повторите попытку.

Это может не решить вашу проблему, но, возможно, она поможет вам в этом.Если вы все-таки поймете это, я надеюсь, что вы вернетесь и заполните некоторые дыры в этом решении.

0 голосов
/ 11 августа 2011

Я думаю, что было бы полезно указать, что для большинства людей, сталкивающихся с этим, простая «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) Перейдите в каталог bin Cygwin.Для меня это c: \ cygwin \ bin.

4) Тип ash

5) Тип '/ usr / bin / rebaseall'

6) Устранить все ошибки (У меня было предупреждение, которое осталось нерешенным, и оно все еще работало нормально)

7) Перезагрузитесь ... и вам должно быть хорошо.

И если вам действительно все равно, что на самом деле происходит, прочитайте запись в блоге, в дополнение к ответу моба здесь на этот же вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...