Фатальна помилка Cygwin не вдалося переоформити .. Що це означає?


30

Під час запуску pythonв cygwin я отримую таку помилку:

    0 [main] python 6140 C:\cygwin\bin\python.exe: *** fatal error - unable to remap \\?\C:\cygwin\lib\python2.6\lib-dynload\time.dll to same address as parent: 0x2B0000 != 0x360000
Stack trace:
Frame     Function  Args
00288E68  6102749B  (00288E68, 00000000, 00000000, 00000000)
00289158  6102749B  (61177B80, 00008000, 00000000, 61179977)
0028A188  61004AFB  (611A136C, 6124112C, 002B0000, 00360000)
End of stack trace
    0 [main] python 9048 fork: child 6140 - died waiting for dll loading, errno 11
abort: Resource temporarily unavailable

Що це означає, і що я повинен зробити, щоб виправити це?

Відповіді:


40

Щоб вирішити проблему, потрібно виконати rebaseallкоманду з rebaseпакета.

  1. Встановіть rebaseпакет за допомогою setup.exeутиліти Cygwin
  2. Закрийте все, що працює, що використовує cygwin1.dll
  3. Відкрийте оболонку Cygwin
  4. Введіть rebaseallпідказку

Повторне звільнення зазвичай потрібно лише тоді, коли встановлені встановлені пакети, що змінюють бібліотеки, що динамічно завантажуються. Я визнаю погану звичку завжди працювати rebaseallпісля встановлення або оновлення пакетів у встановленні Cygwin, а не чекати тієї помилки, яку ви виявите.

Що стосується того, чому ви отримали цю помилку і як rebasing вирішує проблему, ця публікація має про це сказати:

У вас це є назад. Пересилка не порушує переміщення. Переміщення перерв розщеплення. cygwin1.dll повинен мати дуже особливий макет пам'яті, щоб реалізувати семантику вилок у Win32. Якщо це розташування пам’яті порушено, вилка розривається. Переміщення cygwin1.dll порушує необхідний макет пам'яті. 'rebaseall' робить все можливе, щоб знайти всі DLL-файли Cygwin, які він знає, у макет, який дозволяє уникнути зіткнень. Це підтримує необхідний макет пам'яті, щоб вилка могла виконувати свою роботу.


1
я намагався це зробити, і це не спрацювало ... тобто поки я не перезапустив windows (після повторного входу та peflagsall)
Джон Еріксон,

Ян С: Ти мій герой!
Стефан Русек

Крім того, схоже, що для rebaseall потрібні права адміністратора в Windows 7.
xtofl

Sepcifying базовий адреса може в деяких випадках допомогти, як це було запропоновано тут: cygwin.com/ml/cygwin/2011-04/msg00306.html
Лапо

2
Зробити це потрібно в золу чи штрих не через звичайний термінал Cygwin. Запустіть його за допомогою Пуск -> Виконати, його в cygwin \ usr \ bin \ ash. Як тільки зола працює, введіть / usr / bin / rebaseall і натисніть клавішу Enter.
Maciej Swic

10

Це означає, що або стороння програма, така як сканер вірусів, або функція рандомізації адреси DLL, яка була введена в Vista, втручалися у ваш процес таким чином, що його не вдалося розблокувати.

rebaseallУтиліта може бути використана для придавити бібліотеки DLL таким чином, що ця проблема усувається. Він встановлений за замовчуванням. Дивіться, rebaseall --helpяк ним користуватися, та /usr/share/doc/Cygwin/rebase-3.0.1.READMEдля отримання додаткової інформації. Якщо це не допомагає, peflagsallварто спробувати ще одну.


спасибі =) обидві відповіді допомогли мені ... але я можу прийняти лише одну = \
Джон Еріксон

5

У мене була така ж проблема після складання "numpy". Die постраждалих dll було mtrand.dll. Простий

$ /bin/rebaseall

не працює.

Що допомогло було наступне: Вивчіть, чи впливає dll (у даному випадку time.dll) гостро "перезавантажується":

$ /bin/rebaseall -v

Якщо не створити список, який містить повний шлях зачепленого DLL. Наприклад:

$ find /lib -name 'time.dll' > /tmp/mydll.txt

Цей файл також може містити більше dll, по одному на рядок. Потім зателефонуйте

$ /bin/rebaseall -v -T /tmp/mydll.txt

без жодних інших cygwin-матеріалів, як описано вище. Тепер час.dll повинен бути перезавантажений (додатково до "звичайного" повторного виклику).

(Дивно: За 10 років використання cygwin з nt, windows2000, xp мені довелося "перезавантажувати" лише один раз. За один день із (64 бітним) вікном-7 це вже було потрібно.)


2

Є відповідь на проблему.

Джерело: https://github.com/joyent/node/wiki/Building-node.js-on-Cygwin-(Windows)


Неможливо повернути ту саму адресу, що і батьківська

fatal error – unable to remap \?\C:\cygwin\lib\python2.6\lib-dynload\time.dll to same address as parent: 0×360000 != 0×3E0000

Це також не проблема з node.js. Встановіть базу → rebase за допомогою сперти setup.exe, а потім закрийте всі екземпляри Cygwin. Запустіть тире або золу (розташований у каталозі бін під встановленням Cygwin) та запустіть:

$ /bin/rebaseall -v

Він повинен закінчуватися без помилок. Якщо натомість вищезазначене призводить до помилки типу:

rebaseall:'/cygdrive/c/Users/ADMINI~1/AppData/Local/Temp' is not writable

Відкрийте оболонку Cygwin і запустіть:

$ chmod 777 ~/AppData/Local/Temp

Закрийте вікно оболонки і повторіть дії, описані вище. Після завершення перезавантажте комп'ютер. Не забудьте закрити всі відкриті оболонки Cygwin перед тим, як використовувати повторний набір.


Доброю практикою є копіювання інформації із посилання для майбутніх користувачів у випадку, якщо посилання колись не вдасться.
paradd0x
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.