1

メイクファイルの作成を含むプロジェクトを行っています。ここには 2 つの異なる makefile があります。最初のものは最初のビルドステップを行います。2 番目のメイクファイルでは、最初に生成されたオブジェクト ファイル (提供されたパス) を使用し、別の場所で生成されたオブジェクト ファイルをもう 1 つ追加しようとしています。ここで直面している問題は、リンカーがこの新しいオブジェクト ファイルを古いオブジェクト ファイルにリンクできないことです。

このコマンドを使用して、この手順を実行しています。

arm-none-eabi-g++ -T ../linker.ld -nostartfiles -Xlinker --gc-sections -Wl,-Map,"map_file.map" -specs=nano.specs -o "target.elf" new_file.o all_older_files.o

ここで、new_file.o は arm_eabi バージョン 0 であり、all_older_files.o は arm_eabi バージョン 5 です。ただし、エラーや警告は表示されません。そして興味深いのは、new_file.o のシンボルの一部が target.elf ファイルに含まれていることです。リンカ スクリプトを確認しましたが、解決策が見つかりませんでした。また、eabi のバージョンが違いを生んでいるかどうかを確認しましたが、elf エディタを使用して elf ファイルを手動で編集しても同じです。

私が望むのは、new_file.o のセクションをこの target.elf に含めて、これらを利用できるようにすることだけです。

4

1 に答える 1

0

私はこれを得たと思います。ありがとう@Notlikethat、あなたの洞察が私を助けてくれました。「--gc-sections」は、参照されていないシンボルとセクションを無視していることに気付きました。

しかし、これを初めて試したとき、セクションは必要以上に大きなメモリ部分でオフになっていて、これは解決策ではないと思いました。しかし、後で、最初の auto-gen makefile も同じように未使用のセクションを削除していることに気付きました。そのため、Eclipse プロジェクト設定でそれを無効にしてから、メイクファイルでもこの​​フラグを削除する必要がありました。これにより、セクションが本来あるべき場所に配置されました。

必要以上に長い間これと戦っていたので、これでかなりの時間を節約できました。

于 2016-05-02T23:18:38.153 に答える