Error fatal de Cygwin no se puede reasignar. ¿Qué significa?

30

Cuando se ejecuta pythonen cygwin, aparece el siguiente error:

    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

¿Qué significa y qué debo hacer para solucionarlo?

Jon Erickson
fuente

Respuestas:

40

Debe ejecutar el rebaseallcomando desde el rebasepaquete para solucionar el problema.

  1. Instale el rebasepaquete usando la setup.exeutilidad Cygwin
  2. Cierre todo lo que se ejecuta que utiliza el cygwin1.dll
  3. Abrir un shell Cygwin
  4. Escriba rebaseallen el indicador

La reformulación generalmente solo se requiere cuando se instalan paquetes instalados que modifican las bibliotecas que se cargan dinámicamente. Admitiré el mal hábito de siempre ejecutar rebasealldespués de instalar o actualizar paquetes en una instalación de Cygwin en lugar de esperar a que aparezca ese error.

En cuanto a por qué recibió ese error y cómo el rebase resuelve el problema, esta publicación tiene esto que decir al respecto:

Lo tienes al revés. La bifurcación no rompe la reubicación. La reubicación rompe la bifurcación. cygwin1.dll necesita tener un diseño de memoria muy especial para implementar la semántica de la bifurcación en Win32. Si este diseño de memoria se interrumpe, la bifurcación se rompe. Reubicar cygwin1.dll interrumpe el diseño de memoria requerido. 'rebaseall' hace todo lo posible para localizar todas las DLL de Cygwin que conoce en un diseño que evite colisiones. Esto mantiene el diseño de memoria requerido para que fork pueda hacer su trabajo.

Ian C.
fuente
1
estaba intentando esto y no funcionó ... hasta que reinicié Windows (después de un rebaseall y peflagsall)
Jon Erickson
Ian C: Eres mi héroe!
Stefan Rusek
Además, rebaseall parece necesitar derechos de administrador en Windows 7.
xtofl
Sepcificar una dirección base podría ayudar en algunos casos, como se sugiere aquí: cygwin.com/ml/cygwin/2011-04/msg00306.html
lapo
2
Debe hacer esto en ceniza o guión, no a través de la Terminal Cygwin normal. Ejecútelo con Inicio -> Ejecutar, está en cygwin \ usr \ bin \ ash. Una vez que se esté ejecutando ash, escriba / usr / bin / rebaseall y presione enter.
Maciej Swic
10

Significa que un programa de terceros, como un escáner de virus o la función de aleatorización de direcciones DLL que se introdujo en Vista, ha interferido con su proceso de tal manera que no se pudo bifurcar con éxito.

La rebaseallutilidad se puede utilizar para precisar archivos DLL de manera que se evite el problema. Está instalado por defecto. Vea rebaseall --helpcómo usarlo y /usr/share/doc/Cygwin/rebase-3.0.1.READMEpara más detalles. Si no ayuda, peflagsallvale la pena probar otro.

ak2
fuente
gracias =) ambas respuestas me ayudaron ... pero solo puedo aceptar una = \
Jon Erickson
5

Tuve el mismo problema después de compilar "numpy". El dll afectado fue mtrand.dll. Simple

$ /bin/rebaseall

no funcionó.

Lo que ayudó fue lo siguiente: Examine si la dll afectada (en este caso, time.dll) está "rebase" agudamente:

$ /bin/rebaseall -v

Si no, cree una lista que contenga la ruta completa de la dll afectada. P.ej:

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

El archivo también puede contener más dlls, uno por línea. Luego llame

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

sin otras cosas de cygwin ejecutándose, como se describió anteriormente. El time.dll ahora debería volverse a crear (adicionalmente a la versión "normal").

(Extraño: en 10 años de usar cygwin con nt, windows2000, xp, tuve que "rebase" solo una vez. En un día con (64 bit) window-7 esto ya era necesario).

Sebastian Sohr
fuente
2

Hay una respuesta para el problema.

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


No se puede reasignar a la misma dirección que el padre

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

Esto tampoco es un problema con node.js. Instale base → rebase usando setup.exe primero y luego cierre todas las instancias de Cygwin. Inicie dash o ash (ubicado en el directorio bin debajo de la instalación de Cygwin) y ejecute:

$ /bin/rebaseall -v

Debe terminar sin errores. Si, en cambio, lo anterior genera un error como:

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

Abra un shell Cygwin y ejecute:

$ chmod 777 ~/AppData/Local/Temp

Cierre su ventana de shell y repita los pasos anteriores. Una vez que haya terminado, reinicie su PC. Recuerde cerrar todos los shells Cygwin abiertos antes de usar rebaseall.

TunWN
fuente
Es una buena práctica copiar la información del enlace para futuros usuarios en caso de que el enlace falle alguna vez.
paradd0x