このプログラムが他のマシンで動作しない理由はいくつかあります。主な理由を 2 つ要約します。
他のオペレーティング システムでサポートされていないシステム命令を使用しています。これらの命令を別の OS で実行しようとすると、OS は命令を理解できないと文句を言い、プログラムがクラッシュします。
(さらに重要なのは、作成した Windows 実行可能ファイルは、 Microsoft の Portable Executable format.exe
である Windows ファイルです。Linux はELF 形式の実行可能ファイルのみを読み取ることができ、Mac OS X はMach-O 形式を使用します。
これら 2 つの点は、それ自体で議論する価値があります。Joachim がコメントで指摘したように、WINE エミュレーターは Linux で Windows 環境をエミュレートするのに非常に優れているため、これはプログラムの互換性のためのオプションになる可能性があります。
編集:ここで、ポイント 1 はポイント 2 が克服されたと想定していることを追加する必要があります。ポイント 2 は、ある OS の実行可能ファイルが他のオペレーティング システムでは単純に「動作しない」理由です。
コメントへの返信:
一般に、はい、ELF
ファイルはすべての Linux ディストリビューションの標準です (まれな例外がいくつかある場合があります)。同様に、PE
ファイルはすべての Windows バージョンの標準です。比較的最新の CPU を使用している場合、ある Linux ディストリビューションで実行可能ファイルをコンパイルすると、他のディストリビューションでも動作するはずです。
ここでの例外は、最近の CPU を搭載したマシンでプログラムをコンパイルし、それを非常に古い CPU を搭載したマシンで実行したい場合、古い CPU はコンパイラが作成する命令の一部をサポートしていない可能性があることです。ただし、最近では、デフォルト設定でプログラムをコンパイルするだけで、通常はすべての (Intel) CPU で動作します。ターゲット マシンが非常に異なる CPU または古い CPU を使用していることがわかっている場合は、-march=...コンパイラ オプションを追加して、ターゲット マシンで確実に機能する命令をコンパイラが生成できるようにします。
最後に、DOSBox はWindows エミュレーターではなく、DOS エミュレーターです。2 つのシステムは、その歴史にもかかわらず、まったく異なります。DOSBox は、ネイティブの Windows アプリケーションを実行するように設計されているのではなく、ネイティブの DOS アプリケーションを実行するように設計されています (そのほとんどは最近では放棄されています)。Dangerous Dave (私のノスタルジックなお気に入りの 1 つ)などの DOS プログラムを Linux で実行したい場合は、実行できます。ただし、Windows アプリケーションを実行する場合は、この目的のために設計されたエミュレーター ( WINEなど) が必要になります。
参考までに、DOS は廃止されたMZ Executable 形式を使用します。