私自身、システムのようなUNIXの内部動作やプログラミング全般については比較的新しいので、この質問は素朴で愚かに見えるでしょう。
準備はいい?OK!私は約3レベルの滑らかさを経験します。
同様のハードウェアを備えた2つのシステムがあります(主要なポイントはプロセッサです。標準のIntel Core 2 Duoとしましょう)。
1つは実行中です(ここにLinuxディストリビューションを挿入します:以降はUbuntuを使用します)。もう1つは実行中です。たとえば、Mac OS Xです。
同等のプログラムをコンパイルします。次のように言いましょう。
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
共有ライブラリの影響をまだ考慮したくないため、コードは非常に単純です。
それぞれのシステムでコンパイルされた場合。出力の主な違いはELFとMach-Oの問題ではありませんか?フォーマットの各バイナリを削除し、フラットなバイナリを残した場合、逆アセンブルされたマシン命令は同じになりませんか?(おそらく、コンパイラの習慣/傾向に応じていくつかの違いがあります)。
1.) Ubuntuシステムから生成されたフラットバイナリをMach-Oフォーマットで再パッケージ化するプログラムを開発する場合、Mac OS Xシステムで実行されますか?次に、上記の想定プログラムのコンパイル済みバイナリのみがあり、フラットバイナリを再パッケージ化するためのこの神秘的なツールがある場合、単純なプログラムはMac OS Xシステムで実行できますか?
それでは、もう少し詳しく見てみましょう。
現在、次のようなソースを備えたプログラムがあります。
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
2.)このプログラムがコンパイルされ、静的にリンクされていると仮定すると、魔法のプログラムは未加工のバイナリをMach-O形式で再パッケージし、mac os Xで動作させることができますか?他のバイナリに依存する必要がないように見える(この場合、macシステムにはありません)
そして今、最終レベルです。
3.)この想定プログラムを使用して、必要なすべての共有ライブラリをMach-O形式に変換し、代わりに上記のプログラムを動的リンクでコンパイルした場合はどうなりますか。プログラムはまだ実行に成功しますか?
それは今のところそれであるはずです、明らかに、不合理の各ステップは、意味をなすために前のベースに依存しています。そのため、最初の柱が破壊された場合、残りの層に多くのメリットがあるとは思いません。
GUIを念頭に置いたプログラムでこれについて考えることは絶対にありません。ウィンドウシステムは、おそらくまったく別の頭痛の種になるでしょう。この段階では、コマンドラインプログラムのみを検討しています。
今、私は世界を私に修正するように招き、私の不条理な考え方に誤りがあることをすべて教えてくれます。