web-dev-qa-db-ja.com

Cygwinの致命的なエラーでリマップできません。それはどういう意味ですか?

Cygwinでpythonを実行すると、次のエラーが発生します。

    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

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

30
Jon Erickson

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

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

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

そのエラーが発生した理由と、リベースによって問題がどのように解決されるかについては、 this post はこれについて述べています:

あなたはそれを逆に持っています。フォークは再配置を壊しません。移転はフォークを壊します。 Win32でフォークセマンティクスを実装するには、cygwin1.dllに非常に特別なメモリレイアウトが必要です。このメモリレイアウトが中断されると、フォークが壊れます。 cygwin1.dllを再配置すると、必要なメモリレイアウトが中断されます。 'rebaseall'は、衝突を回避するレイアウトにそれが知っているすべてのCygwin DLLを見つけるために最善を尽くします。これにより、必要なメモリレイアウトが維持されるため、forkはその機能を実行できます。

40
Ian C.

これは、ウイルススキャナーなどのサードパーティプログラムまたはVistaで導入されたDLLアドレスのランダム化機能のいずれかが、フォークできなかった方法でプロセスに干渉したことを意味します。

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

10
ak2

「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を使用した1日では、これはすでに必要でした。)

5
Sebastian Sohr

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

ソース: 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インスタンスを閉じます。ダッシュまたはアッシュ(Cygwinのインストールのbinディレクトリーにあります)を開始して、以下を実行します。

$ /bin/rebaseall -v

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

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

Cygwin Shellを開いて実行します。

$ chmod 777 ~/AppData/Local/Temp

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

2
Tun