Erro fatal do Cygwin incapaz de remapear .. O que isso significa?

30

Ao executar pythonno cygwin, recebo o seguinte erro:

    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

O que isso significa e o que devo fazer para corrigi-lo?

Jon Erickson
fonte

Respostas:

40

Você precisa executar o rebaseallcomando do rebasepacote para corrigir o problema.

  1. Instale o rebasepacote usando o setup.exeutilitário Cygwin
  2. Feche tudo em execução que usa o cygwin1.dll
  3. Abra um shell Cygwin
  4. Digite rebaseallno prompt

Geralmente, a rebasagem é necessária apenas quando pacotes instalados são instalados e modificam bibliotecas carregadas dinamicamente. Eu vou admitir o mau hábito de sempre correndo rebaseallapós pacotes de instalar ou atualizar em um Cygwin instalar em vez de esperar que o erro de bater a aparecer.

Quanto ao motivo pelo qual você recebeu esse erro e como a reorganização resolve o problema, este post tem a dizer sobre isso:

Você tem isso ao contrário. A bifurcação não quebra a mudança. A realocação quebra o garfo. O cygwin1.dll precisa ter um layout de memória muito especial para implementar a semântica da bifurcação no Win32. Se esse layout de memória for interrompido, o garfo quebra. A realocação do cygwin1.dll interrompe o layout de memória necessário. 'rebaseall' faz o possível para localizar todas as DLLs do Cygwin que ele conhece em um layout que evita colisões. Isso mantém o layout de memória necessário para que o fork faça seu trabalho.

Ian C.
fonte
1
eu estava tentando isso e não deu certo ... que é até i reiniciado janelas (depois de um rebaseall e peflagsall)
Jon Erickson
Ian C: Você é meu herói!
Stefan Rusek
Além disso, rebaseall parece direitos necessidade de administrador no Windows 7.
xtofl
Sepcifying um endereço de base poderia, em alguns casos ajuda, como sugerido aqui: cygwin.com/ml/cygwin/2011-04/msg00306.html
Lapo
2
Você precisa fazer isso no ash ou no dash, não através do terminal normal do Cygwin. Inicie-o com Iniciar -> Executar, em cygwin \ usr \ bin \ ash. Quando o ash estiver em execução, digite / usr / bin / rebaseall e pressione enter.
Maciej Swic
10

Isso significa que um programa de terceiros, como um antivírus ou o recurso de randomização de endereço DLL que foi introduzido no Vista, interferiu no processo, de forma que não pôde ser bifurcado com êxito.

O rebaseallutilitário pode ser usado para localizar DLLs de forma que o problema seja evitado. Está instalado por padrão. Veja rebaseall --helpcomo usá-lo e /usr/share/doc/Cygwin/rebase-3.0.1.READMEpara mais detalhes. Se não ajudar, peflagsallé outro que vale a pena tentar.

ak2
fonte
obrigado =) as duas respostas me ajudaram ... mas só posso aceitar uma = \
Jon Erickson
5

Eu tive o mesmo problema depois de compilar "numpy". O dll afetado foi o mtrand.dll. Simples

$ /bin/rebaseall

não funcionou.

O que ajudou foi o seguinte: Examine se a dll afetada (neste caso, time.dll) é "rebaseada" de forma aguda:

$ /bin/rebaseall -v

Caso contrário, crie uma lista que contenha o caminho completo da dll afetada. Por exemplo:

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

O arquivo também pode conter mais dlls, uma por linha. Então ligue

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

sem nenhum outro material cygwin em execução, conforme descrito acima. O time.dll agora deve ser reformulado (adicionalmente ao rebaseall "normal").

(Estranho: em 10 anos usando o cygwin com nt, windows2000, xp, eu tive que "rebase" apenas uma vez. Em um dia com a janela 7 (64 bits), isso já era necessário.)

Sebastian Sohr
fonte
2

Há resposta para o problema.

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


Não foi possível mapear novamente para o mesmo endereço que o pai

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

Este também não é um problema do node.js. Instale base → rebase usando o setup.exe primeiro e feche todas as instâncias do Cygwin. Inicie o dash ou ash (localizado no diretório bin na instalação do Cygwin) e execute:

$ /bin/rebaseall -v

Deve terminar sem erros. Se, em vez disso, resultar em um erro como:

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

Abra um shell Cygwin e execute:

$ chmod 777 ~/AppData/Local/Temp

Feche a janela do shell e repita as etapas acima. Quando terminar, reinicie o seu PC. Lembre-se de fechar todas as conchas abertas do Cygwin antes de usar o rebaseall.

TunWN
fonte
É uma boa prática copiar as informações do link para futuros usuários, caso o link falhe.
precisa saber é o seguinte