0

問題: RH5 (gcc 4.1.2 および GLIBC 2.5) から RH6 (gcc 4.4.7 および GLIBC 2.12) への移行の問題

詳細: 大きなプロジェクトを RH5 (gcc 4.1.2) から RH6 (gcc 4.4.7) に移行していますが、すべて問題なくコンパイルおよびリンクされています。

RH5 でコンパイルされたコードは、両方のホスト マシン (RH5 と RH6) で正常に動作します。

ただし、RH6 でコンパイルされたコードはどちらでも動作しません。

実行時エラーはなく、私が実行した多くの回帰テストの 1 つにすぎず、失敗しました。

複雑な要因は次のとおりです。私のコードは、シミュレートされたマシン (マイクロプロセッサ) を作成します。回帰テストを実行するソフトウェア/ファームウェアは、このシミュレートされたマシンで実行されるソフトウェアであり、このファームウェアをデバッグしていません。

RH6 ホスト マシンでコードをコンパイルすると、バグが挿入されます。シミュレートされたマシンの一部である共有オブジェクト ファイル (.so) を作成するためにリンクされている 2 つのオブジェクト ファイル (.o) に問題を突き止めることができました。 .

RH6 マシン (回帰テスト中に実行可能ファイルが失敗する gcc 4.4.7 を搭載したマシン) でコードをコンパイルし、RH5 (gcc 4.1.2) でコンパイルされた 2 つの問題のある (.o) ファイルを追加して ( .so) ファイル (共有オブジェクト) をこれらの 2 つの .o ファイルを使用すると、すべて正常に動作し、私の回帰テストは問題なく合格します。ちなみに、RH5 マシンと RH6 マシンの両方で通過します。

「nm」と「objdump」を使用して、問題のある関数/関数またはライブラリ/ライブラリなどを把握しようとしています。

私の質問: 1- これらのツール (nm および/または objdump) をどのように活用して、犯人を特定することができますか? (上記のコマンドを RH5 と RH6 から生成された .so ファイルで実行し、出力ファイルを比較すると、大きな違いが見られますが、各コンパイラとそのコンテキストの詳細と、潜在的な問題)

2-これを調査して解決するのに本当に役立つツールは他にありますか?

3- RH6 の .so ファイルと RH6 の .so ファイルからの nm/objdump 出力を RH5 の 2 つの .o ファイルと比較すると、それらは似ていて、絡み合った行の端が見えず、もつれを解こうとしてもわかりません。 、これらの出力ファイルを見て問題を解決するにはどうすればよいでしょうか?

コメント、提案、貢献に感謝します。

4

0 に答える 0