Kesalahan fatal Cygwin tidak dapat memetakan kembali .. Apa artinya?

30

Saat berjalan pythondi cygwin, saya mendapatkan kesalahan berikut:

    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

Apa artinya itu, dan apa yang harus saya lakukan untuk memperbaikinya?

Jon Erickson
sumber

Jawaban:

40

Anda perlu menjalankan rebaseallperintah dari rebasepaket untuk memperbaiki masalah.

  1. Instal rebasepaket menggunakan setup.exeutilitas Cygwin
  2. Tutup semua yang berjalan yang menggunakan cygwin1.dll
  3. Buka cangkang Cygwin
  4. Ketik rebaseallpada prompt

Rebasing biasanya hanya diperlukan ketika paket diinstal diinstal yang memodifikasi perpustakaan yang dimuat secara dinamis. Saya akui kebiasaan buruk untuk selalu berjalan rebaseallsetelah menginstal atau memutakhirkan paket dalam instalasi Cygwin alih-alih menunggu kesalahan yang Anda tunjukkan muncul.

Adapun mengapa Anda mendapatkan kesalahan itu dan bagaimana rebasing memecahkan masalah, pos ini mengatakan ini tentang hal itu:

Anda memilikinya mundur. Forking tidak merusak relokasi. Relokasi istirahat forking. cygwin1.dll perlu memiliki tata letak memori yang sangat istimewa untuk mengimplementasikan semantik fork di Win32. Jika tata letak memori ini terganggu, garpu pecah. Relokasi cygwin1.dll mengganggu tata letak memori yang diperlukan. 'rebaseall' melakukan yang terbaik untuk menemukan semua DLL Cygwin yang diketahuinya menjadi tata letak yang menghindari tabrakan. Ini mempertahankan tata letak memori yang diperlukan sehingga garpu dapat melakukan tugasnya.

Ian C.
sumber
1
Saya sudah mencoba ini dan tidak berhasil ... itu sampai saya me-restart windows (setelah rebaseall dan peflagsall)
Jon Erickson
Ian C: Anda adalah pahlawan saya!
Stefan Rusek
Selain itu, rebaseall tampaknya membutuhkan hak Administrator di Windows 7.
xtofl
Memisahkan alamat basis dalam beberapa kasus dapat membantu, seperti yang disarankan di sini: cygwin.com/ml/cygwin/2011-04/msg00306.html
lapo
2
Anda perlu melakukan ini dalam abu atau lari tidak melalui Terminal Cygwin normal. Luncurkan dengan Start -> Run, ini ada di cygwin \ usr \ bin \ ash. Setelah abu berjalan, ketik / usr / bin / rebaseall dan tekan enter.
Maciej Swic
10

Ini berarti bahwa salah satu program pihak ke-3 seperti pemindai virus atau fitur pengacakan alamat DLL yang diperkenalkan di Vista telah mengganggu proses Anda sedemikian rupa sehingga tidak bisa berhasil dipalsukan.

The rebaseallutilitas dapat digunakan untuk dijabarkan DLL sehingga masalah ini dihindari. Ini diinstal secara default. Lihat rebaseall --helpcara menggunakannya, dan /usr/share/doc/Cygwin/rebase-3.0.1.READMEuntuk perincian lebih lanjut. Jika tidak membantu, peflagsallapakah yang lain layak dicoba.

ak2
sumber
terima kasih =) kedua jawaban membantu saya keluar ... tetapi saya hanya dapat menerima satu = \
Jon Erickson
5

Saya memiliki masalah yang sama setelah mengkompilasi "numpy". Dll yang terkena dampak adalah mtrand.dll. Sederhana

$ /bin/rebaseall

tidak bekerja.

Apa yang membantu adalah sebagai berikut: Periksa apakah dll yang terpengaruh (dalam hal ini time.dll) secara akut "dirubah":

$ /bin/rebaseall -v

Jika tidak membuat daftar yang berisi path lengkap dll yang terpengaruh. Misalnya:

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

File juga dapat mengandung lebih banyak dll, satu per baris. Lalu, teleponlah

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

tanpa cygwin berjalan, seperti dijelaskan di atas. Time.dll sekarang harus diubah (selain rebaseall "normal").

(Aneh: Dalam 10 tahun menggunakan cygwin dengan nt, windows2000, xp, saya harus "rebase" hanya sekali. Dalam satu hari dengan (64 bit) window-7 ini sudah neccessary.)

Sebastian Sohr
sumber
2

Ada jawaban untuk masalahnya.

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


Tidak Dapat Memetakan Kembali ke Alamat yang Sama dengan Orang Tua

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

Ini juga bukan masalah dengan node.js. Instal basis → rebase menggunakan setup.exe terlebih dahulu kemudian tutup semua instance Cygwin. Mulai dasbor atau abu (terletak di direktori bin di bawah instalasi Cygwin) dan jalankan:

$ /bin/rebaseall -v

Seharusnya selesai tanpa kesalahan. Jika sebaliknya hasil di atas dalam kesalahan seperti:

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

Buka shell Cygwin dan jalankan:

$ chmod 777 ~/AppData/Local/Temp

Tutup jendela shell Anda dan ulangi langkah-langkah di atas. Setelah selesai, mulai ulang PC Anda. Ingatlah untuk menutup semua kerang Cygwin yang terbuka sebelum menggunakan rebaseall.

TunWN
sumber
Adalah praktik yang baik untuk menyalin informasi dari tautan untuk pengguna di masa depan jika tautan tersebut gagal.
paradd0x