6

クロスプラットフォームとクロスコンパイラの用語に少し混乱しています。まず、クロスプラットフォームについて明確にさせてください。人々がクロス プラットフォームについて話すとき、それは CPU のアーキテクチャ、つまり X86 と X64 を意味します。またはOS、つまりWindows 32ビットまたはWindows 64(サーバーまたはデスクトップ)?UNIX には、64 ビットや 32 ビットのような異なるフレーバーはありません。なんでそうなの?

.NET と Java はクロス コンパイラ言語ですが、それはどういう意味ですか? プログラムを .NET でコンパイルする場合、X86、X64、Any CPU などのオプションを選択する必要があります。それはどういう意味ですか?また、セットアップ プロジェクトでは、x86 と x64 の間でオプションを選択する必要があります。したがって、プログラムが x86 でコンパイルされ、msi ファイルが x64 で作成されている場合、X64 と x86 の両方、またはいずれかで実行されますか?

4

5 に答える 5

6

クロスプラットフォームとは、プログラムが複数の異なるプラットフォームで実行できることを指します。クロスプラットフォーム コードは、これを実現するためにさまざまなツールキット/言語を頻繁に使用します (Qt、Flash など)。

クロスコンパイラは、コンパイラ自体が実行されるプラットフォームとは異なるプラットフォーム用のコードを生成するコンパイラです。コンパイラ自体をホストできる組み込みターゲットはほとんどないため、組み込みターゲットのコンパイラはほとんどの場合クロスコンパイラです。

クロス コンパイラには、ホストとターゲット システムに互換性があることを前提としないビルド システムが必要です。つまり、生成されたコードの実行時の側面 (ワード サイズなど) を把握するために、ビルド時にターゲット実行可能ファイルを実行することはできません。

(クロスコンパイルは、コンパイラ自体にも適用できます。これは、カナディアン クロス コンパイルと呼ばれます。これは、コンパイラが実行されるホストとは異なるホストで (クロス) コンパイラを構築するための手法です。この場合、 3 つのプラットフォームがあります。

  • コンパイラが構築されているプラ​​ットフォーム (ビルド)。
  • コンパイラをホストするプラットフォーム (ホスト)。
  • コンパイラがコードを生成するプラットフォーム (ターゲット)。

ほとんどのプログラマーがこれに遭遇することはないと思います。)

于 2009-06-23T08:34:08.147 に答える
1

「クロス プラットフォーム」とは、OS や CPU (タイプ (x86/MIPS) またはビット サイズ (32/64)) など、さまざまなプラットフォームで動作するものを指します。これは、他のプラットフォームで実行するために再構築が必要かどうかを意味するものではありません。たとえば、QT は多くのプラットフォームをターゲットにすることができますが、アプリケーションはそれぞれで再構築する必要があるか、Java や .Net のように一度だけ構築できる可能性があります。

「クロス コンパイラ」とは、別のプラットフォームで実行できるプログラムを作成する、このプラットフォーム上のコンパイラを意味します。したがって、Win32 で WinCE 実行可能ファイルをビルドします。または、ウィンドウで実行される GCC のバージョンをビルドすることによって、ウィンドウ ボックスで Linux アプリケーションをビルドすることもできますが、その出力ターゲットは Linux/Elf です。組み込みデバイスを使用している場合、ほぼ常にクロスコンパイルしてターゲットの実行可能ファイルをビルドします。

X86、X64、または任意の CPU。それはどういう意味ですか?.Net アプリが 1 つのアーキテクチャを対象とするかどうかを制御します。対象を指定すると、両方では実行されませんが、コンパイラは多くの場合、いくつかの最適化を行います。非ターゲット (任意の CPU) の場合は、両方で実行されます。これは主に、外部の .dll を直接呼び出し、64 ビットまたは 32 ビット バージョンをハード リンクし、アプリケーションを同じ環境でのみ実行したい場合に役立ちます。

インストーラーについては、Windows 64 ビットは 32 ビット アプリケーションと 32 ビット インストーラーを実行できますが、64 ビット アプリケーションは 32 ビット システムでは実行できません。他のプラットフォームでは、通常、実行中のアーキテクチャ (Linux) のコードを再構築するか、Mac ではユニバーサル実行可能ファイルをダウンロードします (内部に複数のターゲット ビルドがあると思います)。

于 2009-06-23T08:03:53.577 に答える
1

ネイティブ コンパイラ: ネイティブ コンパイラは、ソース コードから実行可能ファイルを生成し、コンパイラが利用可能な同じシステム上で実行されるコンパイラです。

クロス コンパイラ: クロス コンパイラは、ソース コードから実行可能ファイルを生成するもので、コンパイラが利用可能な別のシステムで実行されます。

BoundsCheckでネイティブ コンパイラとクロス コンパイラの例を見つける

于 2010-06-29T18:16:49.617 に答える