0

こんにちは、ccarm コンパイラを使用して、WinXP で VxWorks 用の C/C++ を開発しています。そして、ずっと前にビルドされたリリースされた配信の上にホットフィックスを追加したいと思います。ソースはクリア ケースに保管され、すべての配送にラベルが付けられます。したがって、特定の配信のソース コードにアクセスすることが可能です。

元のリリース バージョンから何も変更されていないことを確認するために、同じ出力ファイルを再度ビルドできることを確認する必要があります。

ここに問題があります。CC サーバーからソースを取得してビルドします。次に、出力ファイルを対応するリリース出力と比較します (出力ファイルのタイプは *.lad ファイル + ファイル形式 elf32-littlearm です)。そして、その違いは非常に大きいです (一部のタイム スタンプではありません)。一方、アセンブリ リストも比較しましたが、それらも異なります。

何がそのような違いを引き起こすのか、何か考えがありますか? 私の意見では、このような違いを引き起こす可能性のある項目のリスト - リリースされた出力は、自動ビルド スクリプトを使用して別の PC (WinXP) でビルドされました。新しい出力は、同じコンパイラと設定を使用してローカルでビルドされました。-リポジトリから間違ったラベルを取得しました

追加するものはありますか?

前もって感謝します

4

2 に答える 2

2

readelfまたはを使用objdumpして、シンボルのリストなど、バイナリ ファイルの詳細を取得できます。

両者を比較することで、違いの原因がわかるかもしれません。

これまで readelf や objdump を使用したことがない場合は、オンラインで多くの記事やドキュメントを見つけることができます。

しかし、同じツールチェーン (および同じオプション) で同じラベルを使用している場合、出力が異なる理由はありません。

于 2011-03-12T16:37:58.490 に答える
0

こんにちは、ネットで検索したところ、バイナリの再現性はインクリメンタル ビルドの問題に関連していることがわかりました。

ビルド システムが非インクリメンタルに設定されている場合、すべてがゼロからビルドされます。この構成では、2 つの連続したビルドでも、出力イメージと asm リストに大きな違いが生じます。(私は objdump -d を使用して asm リストを取得します)

ただし、出力イメージに大きな違いがあるにもかかわらずインクリメンタル ビルドを使用すると、asm リストには 1 ~ 2 行の違いしかありません。

私の戦略は、CM ツールとラベルを頼りにします。しかし、事前に readelf を確認します。ありがとう

于 2011-03-13T12:06:21.737 に答える