Tại sao các cửa sổ exe không hoạt động trên Linux?


29

Tôi không hỏi về cách làm cho exe Windows hoạt động trong Linux.

Tôi đang hỏi TẠI SAO nó không hoạt động.

Có gì khác về cách Windows chạy một tệp thực thi và Linux chạy một tệp thực thi? Tại sao họ phải khác biệt? Bên cạnh đó, tại sao các tệp thực thi linux không có phần mở rộng tệp?


Câu trả lời:


45

Các tệp thực thi của Linux và Windows sử dụng các định dạng khác nhau. Linux sử dụng định dạng ELF trên hầu hết các kiến ​​trúc, trong khi Windows sử dụng định dạng PE . ELF phù hợp hơn với cách Linux quản lý các thư viện dùng chung và PE phù hợp hơn với cách Windows quản lý các thư viện dùng chung, nhưng không có lý do cơ bản nào khiến Linux không thể thực thi PE hoặc các tệp thực thi ELF của Windows. Trong thực tế, Linux có thể thực thi các tệp thực thi PE, thông qua Wine .

Khó khăn là Windows và Linux có các API hoàn toàn khác nhau : chúng có các giao diện kernel và bộ thư viện khác nhau. Vì vậy, để thực sự chạy một ứng dụng Windows, Linux sẽ cần phải mô phỏng tất cả các lệnh gọi API mà ứng dụng đó thực hiện. Đó là rất nhiều công việc. Wine làm điều đó ở một mức độ nào đó, nhưng nó rất khó, đặc biệt là vì nhà sản xuất Windows không hợp tác. Bạn có thể so sánh nó với việc học tiếng Anh khi ngôn ngữ mẹ đẻ của bạn là tiếng Trung Quốc: định dạng thực thi là bảng chữ cái (không khó để thành thạo), API là từ vựng (phải mất nhiều năm để đạt đến trình độ bạn có thể bắt đầu đọc văn học ).


9
"Từ vựng" là một từ tương tự xuất sắc.
Tạm dừng cho đến khi có thông báo mới.

Tôi nghĩ bạn có nghĩa là hoàn toàn khác nhau .
Mircea Chirea

Android cũng hỗ trợ Linux bnaries (không phải gói) nếu chúng được biên dịch cho ARM vì nó dựa trên Linux
Suici Doga

@SuiciDoga Sắp xếp, nhưng nó phức tạp hơn thế. Nhân Android có thể chạy các nhị phân Linux (nếu chúng được biên dịch cho đúng ABI kernel, ví dụ: sử dụng các thanh ghi NEON), nhưng nếu bạn muốn chạy các chương trình được liên kết động, bạn cũng phải cài đặt tất cả các thư viện. (Và nếu bạn làm điều đó, bạn cũng có thể cài đặt trình quản lý gói, do đó, các nhị phân của nhưng không phải là gói không thực sự đúng.)
Gilles 'SO- ngừng trở nên xấu xa'

Vâng, tôi biết rằng bạn phải thay đổi đường dẫn thư viện, v.v.
Suici Doga

14

Các tệp nhị phân của Windows có ABI khác và sử dụng API khác với tệp nhị phân của Linux.

Các tệp nhị phân Linux không cần phần mở rộng vì * nix sử dụng các bit cho phép để xác định một tệp thực thi thay vì phần mở rộng.


1
Đồng ý với câu trả lời ... phần dữ liệu bổ sung có thể có liên quan: ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_executable )
RobotHumans

À đúng rồi, nó cũng cần một bộ nạp khác. vi.wikipedia.org/wiki/Loader_%28computing%29
Ignacio Vazquez-Abrams

Tôi đặc biệt thích phần thông tin thứ hai bị thiếu trong câu trả lời của @Gilles.
Timothy Gu

@ IgnacioVazquez-Abrams Điều đó rất thú vị. Điều gì sẽ xảy ra nếu tôi nói với bạn rằng tôi chỉ chạy một trò chơi Windows PlantsVsZombie.exe trên Ubuntu 16.04 Linux nguyên bản? Tôi đã làm điều đó vì chán nản khi biết rằng nó sẽ không khởi chạy, nhưng nó đã làm và tôi có thể chơi nó hoàn toàn tốt. Điều đó giống như không thể, bởi vì trò chơi đó cần api hơi để chạy trước và rõ ràng là không. Làm thế nào mà nó khởi chạy ??? Tôi có nên làm một câu hỏi mới cho điều đó?
Nikos

@ RestlessC0bra: Rượu và Mono là những thứ.
Ignacio Vazquez-Abrams

0

Đây là cách tôi nghe phía cửa sổ giải thích bằng thuật ngữ laymans từ các lập trình viên.

Trong Windows, có các móc nối trong các chương trình và HĐH mà exe thực hiện các cuộc gọi đến đó sẽ không có trong Linux. Bởi vì sự khác biệt trong cả hai môi trường. Ban đầu Linux tìm kiếm quyền, Windows trước tiên tìm định dạng có thể liên kết bằng cách kiểm tra phần mở rộng, xem các thuộc tính sau đó tìm trong tệp exe, v.v.

Có những ứng dụng như Netbackup khởi động trong linux và đã được sửa đổi để chạy trong môi trường windows mà không sử dụng rượu IMHO, thường là những ứng dụng Windows hoạt động tốt nhất ổn định nhất.

Khi ứng dụng Windows. trở nên ngang ngược thường là do một số trong số các hook được giữ bởi ứng dụng không được phát hành hoàn toàn và các cửa sổ nghĩ rằng chúng là (Rò rỉ bộ nhớ). Khi Windows trao không gian bộ nhớ chưa phát hành cho ứng dụng khác Sụp đổ và ghi.


2
Bằng cách nào đó tôi muốn tin rằng Bill Gates đã trả lời câu hỏi của tôi ;-)
Nav
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.