まず、この質問が学校/宿題に関連しているという記録を述べたいと思います。コンピュータ間でのオブジェクトファイルの互換性
たとえば、コンピュータCP1とCP2が同じオペレーティングシステムと機械語を共有しているとします。 CプログラムがCP1上でコンパイルされている場合、そのプログラムをCP2に移動するには、ソースコードを転送してCP2で再コンパイルするか、単にオブジェクトファイルを転送する必要があります。
私の答えは、オブジェクトファイルで十分です。 Cコードはコンパイラによってアセンブリに変換され、アセンブラによってマシンコードにアセンブルされます。アーキテクチャは同じマシンコードとオペレーティングシステムを共有しているため、問題はありません。
しかし、私はそれについてもっと考えると、より混乱するようになってきています。
私の質問は以下のとおりです。そのオブジェクトファイルを参照していない実行ファイル以来
a)に、私はリンクがなかったと仮定しています。 CP2にリンクする際に問題が生じるのでしょうか?
b)コードがC11をCP1で使用していても、CP2のコンパイラがC99のみであっても問題ありませんか?コードがコンパイル/アセンブルされたらこれは無関係であると私は思っています。
c)質問には、共有/ダイナミックリンクライブラリが指定されていません。これは、プログラムが.dll/.so/.dylibファイルに依存しない場合にのみ実際に動作します。そうしないと、CP2でも必要になります。
あまりにも多くの問題があるように感じ、私は今どのように漠然とした質問をしているのかを考えると、単に再コンパイルするほうが安全だと感じています。
Halp!
コンピュータ間でオブジェクトファイルをコピーするdistccでは、C言語の場合でも、すべてのノードで同じバージョンのコンパイラを使用することを推奨しています。 – aschepler