3

この質問は非常に少数の人々に当てはまるはずです...

ARMCプロジェクトをWinarmGCC4.1.2からYagartoGCC4.3.3に移行するのに忙しいです。

私は違いを期待していませんでした、そして両方とも同じmakefileと.ldファイルを使って私のプロジェクトを楽しくコンパイルします。

ただし、Winarmバージョンは実行されますが、Yagartoバージョンは実行されません。プロセッサはAtmelAT91SAM7Sです。

どこを見ればいいのか、どんなアイデアでも大歓迎です。makefileがmakefileであるという私の仮定が正しくないか、Winarmの.ldファイルがYagartoに適用できないと考えています。

これらは両方ともGCCツールチェーンであり、おそらく同じリンカーを使用しているため、確実に互換性がある必要があります。

TIA

終了します。

4

4 に答える 4

3

また、コンパイラの動作の微妙な違いである可能性もあります。コード生成は gcc リリースから gcc リリースに変更されます。コードにセマンティクスが実装に依存する部分が含まれている場合、このように噛まれる可能性があります。たとえば、データのメモリ レイアウトが変更される可能性があり、誤ってデータに依存したコードが破損する可能性があります。

それが何度も起こるのを見ました。

コンパイルでさまざまな最適化オプションを試して、違いが生じるかどうかを確認してください。

于 2009-06-06T19:26:14.697 に答える
3

gcc と他のバイナリ (ld) が同じか、違いに気付かない程度に近い必要があることに同意します。しかし、それがあなたのものであろうと彼らのものであろうと、起動コードと C ライブラリは大きな違いを生む可能性があります。同じソース スクリプトとリンカー スクリプトを使用しようとすると、成功と失敗の違いが生じるのに十分です。これが 100% あなたのコードであり、WinARM または Yagarto からライブラリやその他のファイルが使用されていない場合、これはあまり意味がありません。3.xx から 4.xx へ はい、リンカー スクリプトを再スピンする必要がありましたが、4.1.x から 4.3.x では問題があったことを覚えていません。

于 2009-05-28T06:06:55.683 に答える
2

もし私があなたなら、コンパイル/リンカーフラグ、特にデフォルトをチェックします。異なるツールチェーンが異なるデフォルトのABIまたはFP規則を持つことは非常に一般的です。CPUでサポートされていない命令セット拡張を使用してコンパイルしている場合もあります。

于 2009-05-28T06:15:12.583 に答える
2

WinARM と YAGARTO はどちらも gcc に基づいており、ld ファイルを同等に扱う必要があります。また、どちらも gnu make ユーティリティを使用しています。make ファイルは同じ方法で処理されます。ここここで2 つのツールチェーンを比較できます。

プロジェクトを OCD で実行している場合、OpenOCD デバッガーの実装には違いがあります。また、デバッガーを構成するためにデバッガーに送信されるコマンドも異なる場合があります。

hex ファイルを作成している場合、2 つのツールチェーンが同じバージョンの newlib ライブラリを使用していないため、これは異なる可能性があります。

安全のために、どちらの場合も正しい binutils がパスの最初にあることを確認してください。

于 2009-05-27T07:53:23.733 に答える