Erreur fatale Cygwin incapable de remapper .. Qu'est-ce que cela signifie?

30

Lors de l'exécution pythondans cygwin, j'obtiens l'erreur suivante:

    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'est-ce que cela signifie et que dois-je faire pour y remédier?

Jon Erickson
la source

Réponses:

40

Vous devez exécuter la rebaseallcommande à partir du rebasepackage pour résoudre le problème.

  1. Installez le rebasepackage à l'aide de l' setup.exeutilitaire Cygwin
  2. Fermez tout ce qui fonctionne en utilisant le cygwin1.dll
  3. Ouvrez un shell Cygwin
  4. Tapez rebaseallà l'invite

Le remodelage n'est généralement requis que lorsque des packages installés modifient des bibliothèques chargées dynamiquement. J'admets une mauvaise habitude de toujours courir rebaseallaprès l'installation ou la mise à niveau des packages dans une installation Cygwin plutôt que d'attendre que l'erreur que vous rencontrez apparaisse.

Quant à savoir pourquoi vous avez obtenu cette erreur et comment le rebasage résout le problème, ce message a ceci à dire à ce sujet:

Vous l'avez à l'envers. Forking ne rompt pas la relocalisation. La réinstallation met fin à la fourche. cygwin1.dll doit avoir une disposition mémoire très spéciale pour implémenter la sémantique fork dans Win32. Si cette disposition de la mémoire est perturbée, la fourche se casse. La relocalisation de cygwin1.dll perturbe la disposition de mémoire requise. 'rebaseall' fait de son mieux pour localiser toutes les DLL Cygwin qu'il connaît dans une disposition qui évite les collisions. Cela maintient la disposition de mémoire requise pour que fork puisse faire son travail.

Ian C.
la source
1
J'essayais cela et cela n'a pas fonctionné ... jusqu'à ce que je redémarre Windows (après un rebaseall et un peflagsall)
Jon Erickson
Ian C: Tu es mon héros!
Stefan Rusek
De plus, rebaseall semble avoir besoin des droits d'administrateur sur Windows 7.
xtofl
La séparation d'une adresse de base pourrait dans certains cas aider, comme suggéré ici: cygwin.com/ml/cygwin/2011-04/msg00306.html
lapo
2
Vous devez le faire en frêne ou en tiret et non via le terminal Cygwin normal. Lancez-le avec Démarrer -> Exécuter, son dans cygwin \ usr \ bin \ ash. Une fois que ash est en cours d'exécution, tapez / usr / bin / rebaseall et appuyez sur Entrée.
Maciej Swic,
10

Cela signifie qu'un programme tiers tel qu'un antivirus ou la fonctionnalité de randomisation des adresses DLL introduite dans Vista a interféré avec votre processus de telle manière qu'il n'a pas pu être bifurqué avec succès.

L' rebaseallutilitaire peut être utilisé pour épingler les DLL de manière à éviter le problème. Il est installé par défaut. Voir rebaseall --helpcomment l'utiliser et /usr/share/doc/Cygwin/rebase-3.0.1.READMEpour plus de détails. Si cela n'aide pas, peflagsallc'est un autre qui mérite d'être essayé.

ak2
la source
merci =) les deux réponses m'ont aidé ... mais je ne peux en accepter qu'une = \
Jon Erickson
5

J'ai eu le même problème après avoir compilé "numpy". La DLL affectée était mtrand.dll. Simple

$ /bin/rebaseall

n'a pas fonctionné.

Ce qui a aidé était le suivant: Vérifiez si la DLL affectée (dans ce cas time.dll) est réellement "rebasée":

$ /bin/rebaseall -v

Sinon, créez une liste qui contient le chemin complet de la DLL affectée. Par exemple:

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

Le fichier peut également contenir plus de DLL, une par ligne. Ensuite, appelez

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

sans autre programme cygwin en cours d'exécution, comme décrit ci-dessus. Le time.dll doit maintenant être rebasé (en plus du rebaseall "normal").

(Étrange: en 10 ans d'utilisation de cygwin avec nt, windows2000, xp, je n'ai dû "rebaser" qu'une seule fois. En un jour avec (64 bits) windows-7, c'était déjà nécessaire.)

Sebastian Sohr
la source
2

Il y a une réponse au problème.

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


Impossible de remapper vers la même adresse que le parent

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

Ce n'est pas non plus un problème avec node.js. Installez base → rebase en utilisant setup.exe d'abord, puis fermez toutes les instances Cygwin. Démarrez dash ou ash (situé dans le répertoire bin sous l'installation de Cygwin) et exécutez:

$ /bin/rebaseall -v

Il devrait se terminer sans erreur. Si à la place, ce qui précède entraîne une erreur comme:

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

Ouvrez un shell Cygwin et exécutez:

$ chmod 777 ~/AppData/Local/Temp

Fermez votre fenêtre shell et répétez les étapes ci-dessus. Une fois que vous avez terminé, redémarrez votre PC. N'oubliez pas de fermer tous les shells Cygwin ouverts avant d'utiliser rebaseall.

TunWN
la source
Il est recommandé de copier les informations du lien pour les futurs utilisateurs en cas d'échec du lien.
paradd0x