非常に簡単に言えば、プログラムをクロスプラットフォームにするのは、ある環境からソースを取得して別の環境でコンパイルし、完成した製品を期待どおりに機能させる能力です。
簡単に言えば、プログラムが利用可能であると期待しているものとターゲット環境が提供しているものとの間に完全なオーバーラップがあります。環境固有のライブラリや動作が定義されていない言語機能を使用するなど、オーバーラップが100%未満になるような操作を行うと、オーバーラップしない機能を提供できる環境にプログラムが関連付けられます。
( "プラットフォーム"は少しぎこちない言葉です。プラットフォームとしてのWindowsとUnix、またはLinux、OS X、BSDとSolarisはすべてUnixであるにもかかわらず、人々はそれらについて話すことができます。上記のいずれかを異なる環境で実行してくださいハードウェアアーキテクチャや物事はさらに曖昧になります。
幸い、この問題を緩和するための基準があります。
言語。 あなたはC ++を作成しています。これは1998年にISOによって最初に標準化されました。その標準に準拠して作成したプログラムは、コンパイルして、準拠するコンパイラとランタイムを備えた任意のプラットフォームで期待される結果で実行できます。標準から逸脱しない限り、プログラムのサイズや洗練度に制限はありません。おそらく標準に適合するプログラムが特定のプラットフォームで期待どおりに実行されない場合、そのプラットフォームでの言語の実装が疑わしくなります。多くの言語には、適合性の検証に使用できる慎重に設計されたテストスイートがあります。
Javaは、言語を標準化するだけでなく、オブジェクトコードも標準化するため、特別な言及を得ています。これにより、プログラムを再コンパイルせずにどこでも実行できるようになります。これは、オブジェクトポイントを実行できるプラットフォームカスタマイズされた仮想マシン(またはハードウェア)に追加のレイヤーを押し込んで、適合点を押し下げることによって実現されます。
API。 プログラムに特定のことをさせるために行う呼び出しも、標準化することができます。言語と同様に、これらのAPIとそれらを実装するライブラリは、呼び出し元が特定のプラットフォームに適した基本的な実装を使用して期待どおりに動作するように設定できます。そのようなAPIの1つがIEEEのPOSIX標準で、これは1980年代にUnixで起こっていた断片化を阻止する方法として生まれました。(私はその頃でした。その側面は面白くありませんでした。)標準の呼び出しと動作を定義することで、システムベンダーは、OSへの移行が、過去。POSIXは広く採用され、ほぼ30年経った今でも広く使用されています。
私は、複数のプラットフォームで実行する必要があることを知っていたので、標準に厳密に準拠した多数のプロジェクトを実行しました。私がトラブルに遭遇したのは、コードを実行する予定のすべての場所で機能するコードであり、実行しなかったいくつかの場所でうれしい驚きを与えました。