Lỗi nghiêm trọng của Cygwin không thể ánh xạ lại .. Nó có nghĩa là gì?


30

Khi chạy pythontrong cygwin, tôi gặp lỗi sau:

    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

Điều đó có nghĩa là gì, và tôi nên làm gì để khắc phục nó?

Câu trả lời:


40

Bạn cần chạy rebasealllệnh từ rebasegói để khắc phục sự cố.

  1. Cài đặt rebasegói bằng setup.exetiện ích Cygwin
  2. Đóng tất cả mọi thứ chạy mà sử dụng các cygwin1.dll
  3. Mở vỏ Cygwin
  4. rebasealltại dấu nhắc

Rebasing thường chỉ cần thiết khi cài đặt gói được cài đặt mà thư viện modify được tự động nạp. Tôi sẽ thừa nhận một thói quen xấu là luôn luôn chạyrebaseall sau khi cài đặt hoặc nâng cấp các gói trong bản cài đặt Cygwin thay vì chờ lỗi mà bạn gặp phải để hiển thị.

Đối với lý do tại sao bạn gặp lỗi đó và cách rebasing giải quyết vấn đề, bài này có này để nói về nó:

Bạn có nó ngược. Ngã ba không phá vỡ di dời. Phá vỡ di dời. cygwin1.dll cần có bố cục bộ nhớ rất đặc biệt để triển khai ngữ nghĩa ngã ba trong Win32. Nếu bố trí bộ nhớ này bị gián đoạn, ngã ba bị hỏng. Thay đổi vị trí cygwin1.dll phá vỡ bố cục bộ nhớ cần thiết. 'rebaseall' làm hết sức mình để xác định tất cả các DLL Cygwin mà nó biết về một bố cục tránh va chạm. Điều này duy trì bố trí bộ nhớ cần thiết để ngã ba có thể thực hiện công việc của mình.


1
tôi đã thử cái này và nó không hoạt động ... đó là cho đến khi tôi khởi động lại windows (sau khi rebaseall và peflagsall)
Jon Erickson

Ian C: Bạn là anh hùng của tôi!
Stefan Rusek

Ngoài ra, rebaseall dường như cần quyền Quản trị viên trên Windows 7.
xtofl

Việc xác định địa chỉ cơ sở trong một số trường hợp có thể giúp ích, như được đề xuất tại đây: cygwin.com/ml/cygwin/2011-04/msg00306.html
lapo

2
Bạn cần phải làm điều này trong tro hoặc dấu gạch ngang không thông qua Cygwin Terminal bình thường. Khởi chạy nó với Bắt đầu -> Chạy, trong cygwin \ usr \ bin \ ash. Khi tro đang chạy, gõ / usr / bin / rebaseall và nhấn enter.
Maciej Swic

10

Điều đó có nghĩa là chương trình của bên thứ 3 như trình quét vi-rút hoặc tính năng ngẫu nhiên địa chỉ DLL được giới thiệu trong Vista đã can thiệp vào quá trình của bạn theo cách mà nó không thể kết thúc thành công.

Các rebasealltiện ích có thể được sử dụng để ghim xuống DLL như vậy mà vấn đề là tránh. Nó được cài đặt theo mặc định. Xem rebaseall --helpcách sử dụng và /usr/share/doc/Cygwin/rebase-3.0.1.READMEđể biết thêm chi tiết. Nếu nó không giúp được gì, peflagsallthì một cái khác đáng để thử.


cảm ơn =) cả hai câu trả lời đã giúp tôi ... nhưng tôi chỉ có thể chấp nhận một = \
Jon Erickson

5

Tôi đã có cùng một vấn đề sau khi biên dịch "numpy". Chết dll bị ảnh hưởng là mtrand.dll. Đơn giản

$ /bin/rebaseall

đã không làm việc.

Điều gì đã giúp là như sau: Kiểm tra xem dll bị ảnh hưởng (trong trường hợp này là time.dll) có bị "từ chối" hay không:

$ /bin/rebaseall -v

Nếu không tạo một danh sách chứa đường dẫn đầy đủ của dll bị ảnh hưởng. Ví dụ:

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

Các tập tin cũng có thể chứa nhiều dll, một trên mỗi dòng. Sau đó gọi

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

không có công cụ cygwin nào khác đang chạy, như được mô tả ở trên. Bây giờ time.dll nên được khởi động lại (thêm vào rebaseall "bình thường").

(Lạ: Trong 10 năm sử dụng cygwin với nt, windows2000, xp, tôi chỉ phải "rebase" một lần. Trong một ngày với (64 bit) window-7, điều này đã không cần thiết.)


2

Có câu trả lời cho vấn đề.

Nguồn: https://github.com/joyent/node/wiki/BuILD-node.js-on-Cygwin-(Windows)


Không thể Remap đến cùng địa chỉ với tư cách là phụ huynh

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

Đây cũng không phải là vấn đề với node.js. Cài đặt cơ sở → rebase bằng setup.exe trước sau đó đóng tất cả các phiên bản Cygwin. Bắt đầu dấu gạch ngang hoặc tro (nằm trong thư mục bin trong phần cài đặt của Cygwin) và chạy:

$ /bin/rebaseall -v

Nó sẽ kết thúc mà không có lỗi. Nếu thay vào đó, kết quả ở trên sẽ xảy ra lỗi như:

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

Mở một vỏ Cygwin và chạy:

$ chmod 777 ~/AppData/Local/Temp

Đóng cửa sổ shell của bạn và lặp lại các bước trên. Khi bạn đã hoàn tất, khởi động lại PC của bạn. Nhớ đóng tất cả các vỏ Cygwin đang mở trước khi sử dụng rebaseall.


Cách tốt nhất là sao chép thông tin từ liên kết cho người dùng trong tương lai trong trường hợp liên kết bị lỗi.
paradd0x
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.