再マッピングできないCygwinの致命的なエラー..どういう意味ですか?


30

pythoncygwinで実行すると、次のエラーが表示されます。

    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

それはどういう意味ですか、それを修正するにはどうすればよいですか?

回答:


40

問題を修正するにはrebaseallrebaseパッケージからコマンドを実行する必要があります。

  1. rebaseCygwin setup.exeユーティリティを使用してパッケージをインストールする
  2. を使用する実行中のすべてを閉じます cygwin1.dll
  3. Cygwinシェルを開く
  4. タイプrebaseallプロンプトで

通常、リベースは、動的にロードされるライブラリを変更するインストール済みパッケージがインストールされている場合にのみ必要です。rebaseallCygwinのインストールでパッケージをインストールまたはアップグレードした後、ヒットするエラーを待つのではなく、常に実行するという悪い習慣を認めます。

このエラーが発生した理由と、リベースが問題を解決する方法については、この投稿でそれについて説明します。

あなたはそれを後方に持っています。分岐は再配置を中断しません。再配置は分岐を中断します。cygwin1.dllには、Win32でフォークセマンティクスを実装するために、非常に特殊なメモリレイアウトが必要です。このメモリレイアウトが中断されると、フォークが破損します。cygwin1.dllを再配置すると、必要なメモリレイアウトが混乱します。'rebaseall'は、認識しているすべてのCygwin DLLを衝突を回避するレイアウトに配置するために最善を尽くします。これにより、必要なメモリレイアウトが維持されるため、forkが機能します。


1
私はこれを試してみましたがうまくいきませんでした...それは私がウィンドウを再起動するまでです(rebaseallとpeflagsallの後)
ジョン・エリクソン

イアンC:あなたは私のヒーローです!
ステファンルセック

また、rebaseallにはWindows 7の管理者権限が必要なようです。
xtofl11年

ここで示唆したように、いくつかのケースヘルプのベースアドレスをできSepcifying:cygwin.com/ml/cygwin/2011-04/msg00306.html
のLaPO

2
通常のCygwinターミナルではなく、灰またはダッシュでこれを行う必要があります。スタート->ファイル名を指定して実行で起動し、cygwin \ usr \ bin \ ashにあります。ashが実行されたら、/ usr / bin / rebaseallと入力してEnterキーを押します。
Maciej Swic

10

これは、ウイルススキャナーなどのサードパーティプログラムまたはVistaで導入されたDLLアドレスランダム化機能が、正常に分岐できないようにプロセスに干渉したことを意味します。

このrebaseallユーティリティを使用してDLLを固定し、問題を回避できます。デフォルトでインストールされます。参照してください。rebaseall --helpそれを使用する方法について、および/usr/share/doc/Cygwin/rebase-3.0.1.README詳細については。それでも解決しない場合は、peflagsall試してみる価値があります。


おかげで=)両方の答えは私を助けた...しかし、私は1つしか受け入れることができません= \
ジョンエリクソン

5

「numpy」をコンパイルした後、同じ問題が発生しました。影響を受けるDLLはmtrand.dllでした。シンプル

$ /bin/rebaseall

動作しませんでした。

助けになったのは次のとおりです。影響を受けるdll(この場合はtime.dll)が実際に「リベース」されているかどうかを調べます。

$ /bin/rebaseall -v

影響を受けたdllのフルパスを含むリストを作成しない場合。例えば:

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

ファイルには、1行に1つずつ、より多くのdllが含まれることもあります。その後、呼び出します

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

上記のように、他のcygwinのものは実行していません。time.dllをリベースする必要があります(「通常の」リベースオールに追加)。

(奇妙な:nt、windows2000、xpでcygwinを使用して10年で、一度だけ "リベース"する必要がありました。1日(64ビット)window-7でこれはすでに必要でした。)


2

問題に対する答えがあります。

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


親と同じアドレスに再マップできません

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

これは、node.jsの問題でもありません。最初にsetup.exeを使用してベースをリベースし、次にすべてのCygwinインスタンスを閉じます。dashまたはash(Cygwinのインストールの下のbinディレクトリにあります)を起動し、実行します:

$ /bin/rebaseall -v

エラーなしで終了するはずです。代わりに上記の結果が次のようなエラーになる場合:

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

Cygwinシェルを開き、次を実行します。

$ chmod 777 ~/AppData/Local/Temp

シェルウィンドウを閉じて、上記の手順を繰り返します。完了したら、PCを再起動します。rebaseallを使用する前に、開いているすべてのCygwinシェルを必ず閉じてください。


リンクが失敗した場合に備えて、将来のユーザーのためにリンクから情報をコピーすることをお勧めします。
paradd0x
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.