如何将来自不同.a文件的数据收集到一个数组中? 如何使用ld脚本保留.a文件中的节?

我需要从不同的.a文件中收集一些数据到一个数组。 我通过收集数据到一个部分来做到这一点

第一个.c文件

TArElement __attribute__((section(".my.special.section"))) uwiveuve = { ... 

第二个.c文件

 TArElement __attribute__((section(".my.special.section"))) egwegwxb = { ... 

等等

在ld脚本中

 __my_mega_array_begin = ABSOLUTE(.); KEEP(*(.my.special.section)) __my_mega_array_end = ABSOLUTE(.); 

在主.c文件中

 extern TArElement *__my_mega_array_begin extern TArElement *__my_mega_array_end const t_size array_size = __my_mega_array_end - __my_mega_array_begin; 

所以任何人都可以将他的代码链接到我的代码,我的代码将知道他的代码中的数据。 好吧,它可以工作,但实际上并不…问题是KEEP指令完全与.o文件一起工作,但不是.a。 如果在.a文件中的特定.o文件中没有使用任何部分,那么即使使用KEEP指令,整个.o文件也将从链接中丢弃。

对ld使用–whole-arhive选项会有所帮助,但出于某些原因我不允许使用此选项。 我应该只使用ld脚本文件…

解决问题的另一种方法是通过创建可重定位文件来使用部分链接。 因此.a文件中的所有.o文件都将链接到一个.o文件。 但我也不允许使用部分链接。

所以我应该只使用ld脚本并使用.a文件。

Interesting Posts