2016-05-01 8 views
1

私はmakefileの作成を含むプロジェクトを行っています。ここでは2つの異なるメイクファイルがあります。最初のものは最初のビルドステップです。 2番目のメイクファイルでは、最初に生成されたオブジェクトファイル(提供されたパス)を使用しようとしています。私がここで直面している問題は、リンカーがこの新しいオブジェクトファイルを古いオブジェクトファイルにリンクできないことです。Makefileリンカーがオブジェクトファイルの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ファイルを手作業で編集すると同じです。

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

+0

まず、なぜ2つのメイクファイルが必要ですか?あなたはそうではありません、神は禁じられています、もう一方のメイクファイルを再帰的に呼び出しますか? –

+0

私は混乱しています - あなたはリンカがエラーを出さず、出力ELFを生成し、リンクされたELFには入力オブジェクトからのものが含まれていると言っています - どのように「リンクできませんか?リンカスクリプトは、スクリプトが何をしているのか、そしてオブジェクトが実際に誰が言うことができるセクションが分からないと、それ以上のものを単に破棄しているように聞こえるように聞こえます。または、おそらく「欠落している」セクションは他のものによって参照されていなかったので、あなたがそれを言ったからです。これはメイクファイルと何が関係していますか? – Notlikethat

+0

@MarkGaleck私のプロジェクトでは、EclipseのIDEベースのCプロジェクトを使用しているので、最初のmakeファイルはEclipseからの自動生成メークファイルのようなものです。 2番目のメイクファイルはPost_Buildオプションで設定されたもので、プロジェクトで必要ないくつかの追加ファイルを生成するために使用します。私はautogenファイルを編集したり、プロジェクトの設定を変更したりしたくありませんでした。 – codelock

答えて

0

私はこれを持っていると思います。ありがとうございます@Notlikethat、あなたの洞察力は私を助けました。私は "--gc-sections"が参照されていないシンボルとセクションを無視していることを理解しました。

しかし、これを最初に試したとき、セクションは大量のメモリ部分から離れていて、これは解決策ではないと思っていました。しかし、後で私は、初期の自動生成メイクファイルも同じように未使用のセクションを削除していることに気がつきました。だから、私はそれを無効にする必要がありましたプロジェクトの設定をeclipseし、私のメイクファイルでこのフラグを削除します。これにより、セクションが必要な場所に配置されました。

ありがとう、これは私が必要以上に少し長くこれと戦っていたので、これは時間の節約になりました。

関連する問題