git - what - cygwin sed
git svn-error bajo cygwin (4)
Tengo cygwin y git. Estoy intentando comprometerme con git para svn - git svn dcommit
. Pero falla con error extraño:
$ git svn dcommit 4 [main] perl 5536 C:/cygwin/bin/perl.exe: *** fatal error - unable to remap //?/C:/cygwin/lib/perl5/5.10/i686-cygwin/auto/List/Util/Util.dll to same address as parent: 0xA20000 != 0xB40000 Stack trace: Frame Function Args 0088B508 6102749B (0088B508, 00000000, 00000000, 00000000) 0088B7F8 6102749B (61177B80, 00008000, 00000000, 61179977) 0088C828 61004AFB (611A136C, 6125AB3C, 00A20000, 00B40000) End of stack trace
Cómo puedo arreglarlo ? Gracias.
PS Mi sistema es Windows 7 64 bit.
Actualizar
reabase
ayudó. pero tuve que reiniciar después de ejecutar rebase.
¿Has rebaseall
un rebaseall
como se describe aquí ?
Cuando trabajas con Cygwin, a veces obtendrás un error como este
unable to remap some.dll to same address as parent someapp 4292 fork:
child 3964 - died waiting for dll loading, errno 11"
Entonces necesitarías ejecutar rebaseall.
Para ejecutarlo, cierre todas las ventanas de Cygwin, Ejecute<cygwin_home>/bin/ash.exe
, se abrirá una nueva ventana de consola
ejecutarrebaseall
allí.
Una vez que se haya completado, puede volver a ejecutar Cygwin nuevamente sin ningún problema :-)
Según el informe OP, tuvo que reiniciar para que el trabajo de rebaseall
funcione.
Dan Molding menciona en los comentarios:
Solo agregaré que cerrar todas las ventanas de Cygwin puede no ser suficiente.
Debe asegurarse de que todos los procesos y servicios de Cygwin se terminen y / o detengan (ps -a
fromash
no muestre nada más queash
yps
) antes de volver a basar .
rsenna reporta en los comentarios :
Para obtener una explicación de por qué se necesita esto, vea
fatal error - unable to remap to same address as parent
: Cygwin, Ruby on Rails, llamadas al sistemaEntonces, ¿qué está sucediendo realmente?
Bueno, en este caso, el problema se debió a la forma en que Windows administra sus.dll
.Windows usa
ASLR
(asignación aleatoria de diseño de espacio de direcciones) para administrar sus.dll
. Carga tus archivos DLL en diferentes áreas de la memoria cada vez que inicias tu computadora.
Si esto se sale de control, la próxima vez que busque ese.dll
, puede bloquear su sistema. O si busca en el lugar equivocado, puede bloquear su sistema.
Entonces, ¿cómo puede este sistema salirse de control? Bueno, ejecutar el programa de configuración de cygwin puede afectar el mantenimiento de registros, especialmente si elASLR
ha cambiado pero Cygwin mantiene una copia anterior (esto puede suceder cuando no se completa la configuración).ASLR es excelente contra el malware o la defensa de hackers. Los piratas informáticos no pueden probar constantemente nuevas direcciones para sus
.dll
sin bloquear su sistema.
Enfrenté problemas similares y no me fue bien hasta que corrí 1. rebaseall 2. perlrebase 3. peflagsall
Ejecutarlos todos para solucionar el problema
Las respuestas anteriores no dieron como resultado una solución confiable al problema de la ejecución de cygwin git en Windows de 64 bits (Windows 7) para nuestro equipo. Publiqué una pregunta en el correo electrónico de Git y obtuve esta respuesta de Pascal Obry:
Jon
Este es un problema conocido. Desde hace mucho tiempo he dejado el mundo de Windows, pero todavía tengo algunas notas para "arreglar" esto:
Desde el shell de cenizas (asegúrese de que no haya ningún proceso Cygwin ejecutándose):
$ rebaseall
$ peflagsall
Intente su comando de nuevo. Si aún no funciona, intente en su lugar: $ rebaseall -b 0x50000000 -o 0x80000 o -b 0xNNNN0000 donde NNNN es cualquier número hexadecimal entre 2000 y 7000. La opción -o le indica que deje más espacio entre las dlls, también ayuda. Lo hizo en mi caso.
Si tiene curiosidad, consulte /usr/share/doc/Cygwin/rebase-3.0.README para obtener más información.
Ver también: http://www.spinics.net/lists/git/msg183753.html
Pascal también señaló en un seguimiento que:
... la parte más importante es ejecutar peflagsall, esta fue la forma de solucionarlo correctamente en Win7 IIRC.
Los resultados iniciales, pero no definitivos, sugieren que esta solución funciona mejor que las otras sugerencias documentadas aquí. Actualizaré esta publicación en aproximadamente una semana para indicar si esta receta es suficiente para obtener una solución permanente y confiable.
Tenía este problema, pero ejecutar rebaseall no solucionaría el problema. Estaba intentando ejecutar git svn dcommit y al ver los errores de reasignación mencionados, no importa cuántas veces ejecuté rebaseall y / o reinicié.
Aquí hay una muestra de lo que vi. Anote la referencia a la dirección 0x6FA00000.
$ git svn dcommit Compromiso con 844 [main] perl 1136 C: / cygwin / bin / perl.exe: * error fatal: no se puede volver a asignar C: / cygwin / bin / cygdb-4.5.dll a la misma dirección que el padre: 0x58B40000! = ** 0x6FA00000 Rastreo de pila: Marco
Function Args 0082B458 6102792B (0082B458, 00000000, 00000000, 00000000) 0082B748 6102792B (6117DC60, 00008000, título de la naturaleza), tipo de caracol, tipo de entidad, n. murió esperando la carga dll, errno 11
No creo que sea importante, pero estoy ejecutando en Windows 7 Enterprise de 32 bits con la imagen corporativa de mi empresa.
Pude arreglar esto siguiendo los consejos que encontré en la wiki de Chromium:
http://code.google.com/p/chromium/wiki/CygwinDllRemappingFailure
Utilicé ListDlls.exe (http://technet.microsoft.com/en-us/sysinternals/bb896656.aspx) de cygwin para capturar la salida de DLL cargadas en procesos en ejecución y grep''ed para la dirección que causa problemas:
$ ./ListDlls.exe | tee foo
$ cat foo | grep 6fa000...
0x6fa00000 0x3c000 9.05.0005.9574 C: / PROGRA ~ 1 / Sophos / SOPHOS ~ 1 / SOPHOS ~ 1.DLL
Esta dirección de carga coincidente de una DLL proporcionada por Sophos Security que mi grupo de TI está ejecutando en nuestras máquinas de forma predeterminada y fue la causa del error. rebaseall no tuvo la oportunidad de solucionar el problema porque la DLL proporcionada por Sophos no forma parte de cygwin.
La wiki de Chromium dijo que elegir una dirección base menos que la DLL que causa el problema, así que elegí 0x60000000 . Es posible que tenga que elegir una dirección base diferente según la DLL ofensiva que pueda ver.
Vuelvo a ejecutar rebaseall desde un indicador de cmd.exe y no hay otros procesos cygwin en ejecución.
c: / cygwin / bin> ash / usr / bin / rebaseall -b 0x60000000
Después de reiniciar mi cygwin shell git svn dcommit funcionó.