我正在为 LD 编写一个链接器脚本来收集所有 .init_array 部分,以便调用固件中声明的所有全局对象的构造函数。
除非我在静态库中有一个未引用的全局对象,否则一切正常。在这种情况下,尽管我使用了如下的 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 中明确引用的其他对象也被包括在内。
任何有关如何解决此问题的帮助将不胜感激。
提前致谢