3

同じソースコードを作成する場合は、同じツールチェーン(同じコンパイラ、リンカーなど、GCC 4.4)、同じオペレーティングシステムの同じバージョン(私のCentos 5 Linux)を使用して、同じライブラリの同じバージョンにリンクします。ケース)が、2つの異なるマシン上。

生成されたバイナリは同一であると想定するのは合理的ですか?

この背後にあるコンテキストは、私のコードに「未定義動作」があり、一方の構成では「機能する」が、もう一方の構成では機能しないということです。明白な答えはこれを修正することですが、生成されるバイナリが同一である必要があるという私の仮定が同じであるかどうかを知りたいと思います。正しい。

サイズが数百バイト異なることに気付きました。シンボルが同じであっても、「nm」コマンドで表示されるシンボルの位置はわずかに異なります。

4

1 に答える 1

1

通常、同じホスト上のビルド間でも、日付やメタデータがわずかに異なると予想されます。

また、コンパイラフラグについても言及していません(#defineたとえば、コマンドラインからの最適化とs)。

ただし、最初はファイルが同じサイズになるはずだと思います。これにより、2つのシステム間で何かが同じではないという結論に至ります。最も可能性の高い候補は、システムヘッダー(OSインストールのルートレベルの機能が1つだけで、これらのファイルのビューがまったく異なる可能性があります)と依存ライブラリです。

g++ -Eで前処理するか、類似することで、ヘッダーが同じであることを確認できます。ライブラリパスをたどって、リンク先のファイルが各システムで同一であることを確認することもできます。

于 2013-01-23T16:21:54.997 に答える