ファームウェアで宣言されているすべてのグローバルオブジェクトのコンストラクターを呼び出すために、すべての.init_arrayセクションを収集するLDのリンカースクリプトを作成しています。
静的ライブラリに参照されていないグローバルオブジェクトがない限り、すべてが正常に機能します。この場合、KEEPマクロを次のように使用しているにもかかわらず、オブジェクトは明示的に参照されていませんが、最終的なバイナリで破棄されます。(-gc-sectionsを使用するかどうかは関係ありません)。
まったく同じ参照されていないオブジェクトが静的ライブラリの外部に配置され、リンカースクリプトの汎用行によってキャッチされた場合、そのオブジェクトは含まれます。
.init_array :
{
_init_array_start = .;
KEEP (*core*:*(SORT(.init_array*)))
KEEP (*core*:*(.init_array))
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
PROVIDE (_init_array_end = .);
} > flash
ライブラリはlibcore.aと呼ばれます。libcore.aで明示的に参照されている他のオブジェクトは含まれます。
これを修正する方法についての助けは本当にありがたいです。
前もって感謝します