2

疑い

次のように、Microsoft Visual C++ 2010 Express でいくつかのコードを記述しました。

#include<iostream>

int main()
{
    system("cls");

    char name[20];

    cout<<"\nEnter your name:";

    cin.getline(name,20);

    system("pause");

    cout<<"\nYour name is:"<<name;

    system("pause");

    return 0;

}

そして今、私はそれをコンパイルして、Linux マシンの友人に送りました。彼は DOSBox ソフトウェアをダウンロードし、このプログラムを実行します。

疑い

私のマシンでも同じように動作しますか、それとも何か問題が発生しますか?

なぜ私はこれを求めているのですか?

最近、Linux ライブ CD をダウンロードして、自分のマシンで実行しました。共有PCのため、このマシンにはインストールできません。とにかく、 cls 端末に入力しましたが、応答がありませんでした。再度入力 pause しましたが、反応がありませんでした。そのため、上記のコードでシステムに渡しているコマンド「cls」が実際に Linux マシンに影響を与えるかどうか疑問に思いました。

4

2 に答える 2

4

このプログラムが他のマシンで動作しない理由はいくつかあります。主な理由を 2 つ要約します。

  1. 他のオペレーティング システムでサポートされていないシステム命令を使用しています。これらの命令を別の OS で実行しようとすると、OS は命令を理解できないと文句を言い、プログラムがクラッシュします。

  2. (さらに重要なのは、作成した 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 形式を使用します。

于 2013-03-06T09:21:50.903 に答える
0
  1. pauseこれらは Windows/DOS 固有のコマンドであるため、他の OSではclsおそらく直接動作しません。

  2. DOS 固有のコマンドを削除してプログラムを汎用にすると、Windows でビルドされた EXE ファイルは、Wine を介して Linux または MacOS で実行できる可能性が高くなります。http://www.winehq.org/about/およびhttp://wiki.winehq.org/MacOSXを参照してください。問題があるかどうかを確認するためにまだ試してみる必要があるため、「おそらく」と言っています。

  3. Virtual Boxのように Windows を実行している仮想化環境内で EXE 実行可能ファイルを実行すると、動作します。

  4. Linux では、画面をクリアするコマンドはclear. それはあなたが本当にしようとしていることですか?

于 2013-03-06T10:00:12.193 に答える