Windows exe neden Linux'ta çalışmıyor?


29

Ben değilim değil soran nasıl Linux, Windows exe çalışması için.

Soruyorum NEDEN çalışmıyor.

Windows'un yürütülebilir bir çalıştırma şekli ve Linux'un yürütülebilir bir çalıştırma biçimi hakkında farklı olan nedir? Neden farklı olmak zorunda kaldılar? Ayrıca, linux çalıştırılabilir dosyalarının neden dosya uzantısı yok?


Yanıtlar:


45

Linux ve Windows çalıştırılabilir dosyaları farklı formatlar kullanır. Linux , çoğu mimaride ELF formatını, Windows ise PE formatını kullanır . ELF, Linux'un paylaşılan kütüphaneleri yönetme şekline daha uygun ve PE, Windows'un paylaşılan kütüphaneleri yönetme şekline daha uygundur, ancak Linux'un PE çalıştırılabilir dosyalarını veya Windows ELF çalıştırılabilir dosyalarını yürütememesi için temel bir neden yoktur. Aslında Linux olabilir aracılığıyla, PE çalıştırılabilirleri Şarap .

Zorluk şu ki, Windows ve Linux tamamen farklı API'lere sahip : farklı çekirdek arayüzleri ve kütüphaneler kümeleri var. Bu nedenle, aslında bir Windows uygulamasını çalıştırmak için Linux uygulamanın yaptığı tüm API çağrıları öykünmek zorunda kalacak. Çok fazla iş var. Şarap bir dereceye kadar yapıyor, ancak özellikle Windows yapımcısı işbirliği yapmadığından çok zor. Ana diliniz Çince iken İngilizce öğrenmekle karşılaştırabilirsiniz: çalıştırılabilir biçim alfabe (ustalaşmak zor değil), API kelime haznesidir (literatür okumaya başlayabileceğiniz bir seviyeye ulaşmak yıllar alır) ).


9
"Kelime" mükemmel bir benzetmedir.
sonraki duyuruya kadar duraklatıldı.

Bence tamamen farklı demek istedin .
Mircea Chirea,

Android aynı zamanda ARM için derlenirse Linux paketlerini (paketleri değil) destekliyor çünkü Linux tabanlı
Suici Doga

@SuiciDoga Sırala, ancak bundan daha karmaşık. Android çekirdeği Linux ikili dosyalarını çalıştırabilir (eğer doğru çekirdek ABI için derlenmişlerse, örneğin NEON kayıtlarının kullanımıyla), ancak dinamik olarak bağlı programları çalıştırmak istiyorsanız, tüm kütüphaneleri de kurmanız gerekir. (Ve bunu yaparsanız, bir paket yöneticisi de kurabilirsiniz, bu yüzden “ikili dosyalar ancak paket değil” gerçekten doğru değildir.)
Gilles 'ÇÖZÜM'

Evet, kütüphane yolunu vs. değiştirmek zorunda olduğunuzu biliyorum
Suici Doga

14

Windows ikili dosyaları farklı bir ABI'ye sahiptir ve Linux ikili dosyalarından farklı bir API kullanır .

Linux ikili dosyalarının bir uzantıya ihtiyacı yoktur çünkü * nix , uzantı yerine yürütülebilir bir dosyayı tanımlamak için izin bitlerini kullanır .


1
Cevabını kabul edin ... alakalı olabilecek ilave veriler: ELF ( en.wikipedia.org/wiki/Executable_and_Linkable_Format ) vs PE ( en.wikipedia.org/wiki/PE_executable )
RobotHumans

Ah evet, farklı bir yükleyiciye de ihtiyacı var. en.wikipedia.org/wiki/Loader_%28computing%29
Ignacio Vazquez-Abrams

Özellikle @Gilles'in cevabındaki eksik bilgiyi seviyorum.
Timothy Gu

@ IgnacioVazquez-Abrams Bu çok ilginç. Peki ya sadece Ubuntu 16.04 Linux'daki bir Windows oyunu PlantsVsZombies.exe oyunu çalıştırdığımı söylesem? Bunu başaramayacağını bilerek can sıkıntısı yaptım ama yaptım ve gayet iyi oynayabilirim. Bu imkansız gibi, çünkü bu oyun ilk önce koşmak için buhar apisine ihtiyaç duyuyor ve net olarak yapmadı. Nasıl başlattı ??? Bunun için yeni bir soru yapmalı mıyım?
Nikos,

@ HuzursuzC0bra: Şarap ve Mono şeylerdir.
Ignacio Vazquez-Abrams

0

Bu, pencereler tarafının laymans cinsinden programcılardan açıklandığını duydum.

Windows'ta programlarda kancalar var ve Exe'in çağrı yaptığı işletim sistemi Linux'ta olmayacak. Her iki ortamdaki farklılıklar nedeniyle. Başlangıçta Linux izinleri arar, Windows önce uzantıyı inceleyerek, özelliklere bakıp ardından Exe dosyasının içine bakarak vb. Bağlanabilir bir format arar.

Linux'ta başlatılan ve Windows IMHO kullanarak Windows ortamında çalışacak şekilde değiştirilmiş olan Netbackup gibi uygulamalar vardır, bunlar genellikle en iyi Windows Uygulamaları olan en istikrarlı davranışlardır.

Ne zaman Windows Uygulamaları. Genellikle asılsız hale gelir, çünkü uygulama tarafından tutulan bu kancaların bazıları tamamen serbest bırakılmadı ve pencereler onların olduğunu düşünüyor (Bellek Sızıntıları). Windows serbest bıraktığında belleği boşalttığında başka bir uygulamanın bulunduğu yere çarparak çöker ve yazın.


2
Her nasılsa Bill Gates'in sorumu cevapladığına inanmak istiyorum ;-)
Nav
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.