LinuxでWindows exeが機能しないのはなぜですか?


29

LinuxでWindows exeを動作させる方法について質問していません

私はなぜそれが機能しないのか尋ねています。

Windowsが実行可能ファイルを実行し、Linuxが実行可能ファイルを実行する方法の違いは何ですか?なぜ彼らは異なっていなければならなかったのですか?それに、なぜLinux実行可能ファイルにファイル拡張子がないのですか?


回答:


45

LinuxとWindowsの実行可能ファイルは異なる形式を使用します。LinuxはほとんどのアーキテクチャでELF形式を使用しますが、WindowsはPE形式を使用します。ELFはLinuxが共有ライブラリを管理する方法により適しています。PEはWindowsが共有ライブラリを管理する方法により適していますが、LinuxがPE実行可能ファイルまたはWindows ELF実行可能ファイルを実行できなかった根本的な理由はありません。実際、Linux Wineを介してPE実行可能ファイルを実行できます。

難点は、WindowsとLinuxのAPIがまったく異なることです。カーネルインターフェイスとライブラリセットが異なります。したがって、Windowsアプリケーションを実際に実行するには、Linuxがアプリケーションが行うすべてのAPI呼び出しをエミュレートする必要があります。それは大変な仕事です。Wineはある程度それを行いますが、特にWindowsのメーカーが協力していないため、非常に困難です。たとえば、母国語が中国語の場合に英語を学習する場合と比較できます。実行形式はアルファベット(習得するのは難しくありません)、APIは語彙です(文献を読み始めることができるレベルになるには数年かかります) )。


9
「語彙」は優れた例えです。
追って通知があるまで一時停止します。

あなたは完全に違うことを意味したと思います。
ミルチアチレア

それはLinuxをベースにしているので、それらがARM用にコンパイルされている場合はAndroidのも、Linuxのbnaries(ないパッケージ)をサポートしています
Suiciドーガ

@SuiciDogaちょっとですが、それよりも複雑です。AndroidカーネルはLinuxバイナリを実行できます(NEONレジスタを使用するなど、適切なカーネルABI用にコンパイルされている場合)が、動的にリンクされたプログラムを実行する場合は、すべてのライブラリもインストールする必要があります。(あなたはそう、あまりにも「バイナリをではなく、パッケージ」パッケージマネージャをインストールすることができることを行う場合は本当ではありません。)
ジル「SO-停止されて悪」

はい、私はあなたがなど、ライブラリパスを変更する必要があることを知っている
Suiciドーガ

14

Windowsバイナリには異なるABIがありますが異なり、Linuxバイナリとは異なるAPIを使用します

* nixは拡張機能の代わりに許可ビットを使用して実行可能ファイルを識別するため、Linuxバイナリは拡張機能を必要としません。


1
回答に同意します...関連する可能性のある追加のデータ:ELF(en.wikipedia.org/wiki/Executable_and_Linkable_Format)vs PE(en.wikipedia.org/wiki/PE_executable
RobotHumans 10/11/11


私は特に、@ Gillesの回答から欠落している2番目の情報が気に入っています。
ティモシー区14

@ IgnacioVazquez-Abramsそれはとても興味深いです。Ubuntu 16.04 LinuxでWindowsゲームPlantsVsZombies.exeをネイティブに実行していると言ったらどうなりますか?私はそれが起動しないことを知って退屈からそれをしましたが、それはうまくいき、私は完全にうまくプレイできました。そのゲームは、最初に実行するためにSteam APIが必要であり、明らかにそうではないため、不可能のようです。どのように起動しましたか?そのために新しい質問をする必要がありますか?
ニコス

@ RestlessC0bra:WineとMonoは重要です。
イグナシオバスケス-エイブラムス

0

これは私がプログラマーから素人の言葉で説明するウィンドウサイドを聞いた方法です。

Windowsにはプログラムにフックがあり、Exeがそれを呼び出すOSはLinuxにはありません。両方の環境の違いのため。最初にLinuxは許可を探しますが、Windowsはまず拡張機能を調べ、プロパティを調べ、次にExeファイル内を調べるなどして、リンク可能な形式を探します。

NetbackupのようなアプリケーションはLinuxで起動し、ワインIMHOを使用せずにWindows環境で実行するように変更されています。多くの場合、これらは最も安定して動作するWindowsアプリです。

Windowsアプリの場合。通常、手に負えなくなるのは、アプリケーションによって保持されているフックの一部が完全に解放されておらず、Windowsがそれらをメモリリークと考えているためです。Windowsが未解放のメモリスペースを別のアプリケーションに渡すと、クラッシュして書き込みます。


2
どういうわけか、ビル・ゲイツが私の質問に答えたと信じたい;-)
Nav
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.