Errore irreversibile di Cygwin impossibile rimappare. Cosa significa?


30

Durante l'esecuzione pythonin Cygwin, viene visualizzato il seguente errore:

    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

Cosa significa e cosa devo fare per risolverlo?

Risposte:


40

È necessario eseguire il rebaseallcomando dal rebasepacchetto per risolvere il problema.

  1. Installa il rebasepacchetto usando l' setup.exeutilità Cygwin
  2. Chiudi tutto ciò che è in esecuzione che utilizza cygwin1.dll
  3. Apri una shell Cygwin
  4. Digitare rebaseallal prompt

Il rebasing è in genere necessario solo quando sono installati pacchetti installati che modificano le librerie caricate dinamicamente. Devo ammettere la cattiva abitudine di correre sempre rebasealldopo aver installato o aggiornato i pacchetti in un'installazione Cygwin piuttosto che aspettare che l'errore che si è verificato venga visualizzato.

Per quanto riguarda il motivo per cui hai avuto quell'errore e come la riformulazione risolve il problema, questo post ha questo da dire al riguardo:

Lo hai al contrario. Il forking non interrompe il trasferimento. Il trasferimento interrompe il fork. cygwin1.dll deve avere un layout di memoria molto speciale per implementare la semantica del fork in Win32. Se questo layout di memoria viene interrotto, la forcella si rompe. Il trasferimento di cygwin1.dll interrompe il layout di memoria richiesto. 'rebaseall' fa del suo meglio per individuare tutte le DLL Cygwin di cui è a conoscenza in un layout che evita le collisioni. Ciò mantiene il layout di memoria richiesto in modo che Fork possa fare il suo lavoro.


1
stavo provando questo e non ha funzionato ... questo fino a quando non ho riavviato Windows (dopo un rebaseall e peflagsall)
Jon Erickson,

Ian C: Sei il mio eroe!
Stefan Rusek,

Inoltre, rebaseall sembra aver bisogno dei diritti di amministratore su Windows 7.
xtofl

La separazione di un indirizzo di base potrebbe in alcuni casi aiutare, come suggerito qui: cygwin.com/ml/cygwin/2011-04/msg00306.html
lapo

2
È necessario farlo in cenere o trattino non attraverso il normale terminale Cygwin. Avviarlo con Start -> Esegui, è in cygwin \ usr \ bin \ ash. Quando ash funziona, digita / usr / bin / rebaseall e premi invio.
Maciej Swic,

10

Significa che un programma di terze parti come uno scanner antivirus o la funzionalità di randomizzazione dell'indirizzo DLL introdotta in Vista hanno interferito con il processo in modo tale da non poter essere biforcato con successo.

L' rebaseallutilità può essere utilizzata per fissare le DLL in modo da evitare il problema. È installato per impostazione predefinita. Vedi rebaseall --helpcome usarlo e /usr/share/doc/Cygwin/rebase-3.0.1.READMEper ulteriori dettagli. Se non aiuta, ne peflagsallvale la pena provare un altro.


grazie =) entrambe le risposte mi hanno aiutato ... ma posso accettarne solo una = \
Jon Erickson

5

Ho avuto lo stesso problema dopo aver compilato "numpy". La dll colpita era mtrand.dll. Semplice

$ /bin/rebaseall

non ha funzionato.

Ciò che ha aiutato è stato il seguente: Esaminare se la dll interessata (in questo caso time.dll) è "riordinata" in modo automatico:

$ /bin/rebaseall -v

In caso contrario, creare un elenco che contiene il percorso completo della dll interessata. Per esempio:

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

Il file può contenere anche più dll, uno per riga. Quindi chiama

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

senza altre cose cygwin in esecuzione, come descritto sopra. Il time.dll dovrebbe ora essere modificato (in aggiunta al rebaseall "normale").

(Strano: in 10 anni di utilizzo di cygwin con nt, windows2000, xp, ho dovuto "riformulare" solo una volta. In un giorno con (64 bit) window-7 questo era già necessario.)


2

C'è una risposta per il problema.

Fonte: https://github.com/joyent/node/wiki/Building-node.js-on-Cygwin-(Windows)


Impossibile rimappare allo stesso indirizzo del genitore

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

Anche questo non è un problema con node.js. Installare prima → rebase utilizzando setup.exe, quindi chiudere tutte le istanze di Cygwin. Avviare dash o ash (situato nella directory bin nell'installazione di Cygwin) ed eseguire:

$ /bin/rebaseall -v

Dovrebbe finire senza errori. Se invece quanto sopra risulta in un errore come:

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

Apri una shell Cygwin ed esegui:

$ chmod 777 ~/AppData/Local/Temp

Chiudi la finestra della shell e ripeti i passaggi precedenti. Al termine, riavvia il PC. Ricordarsi di chiudere tutte le shell Cygwin aperte prima di usare rebaseall.


È buona norma copiare le informazioni dal collegamento per utenti futuri nel caso in cui il collegamento non dovesse mai fallire.
paradd0x,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.