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

C 如何将不同.a文件中的数据收集到一个数组中?如何使用ld脚本在.a文件中保留节?,c,linker,elf,ld,.a,C,Linker,Elf,Ld,.a,我需要从不同的.a文件收集一些数据到一个数组。 我通过将数据收集到一个部分来实现这一点 第一个.c文件 TArElement __attribute__((section(".my.special.section"))) uwiveuve = { ... 第二个.c文件 TArElement __attribute__((section(".my.special.section"))) egwegwxb = { ... 等等 用ld脚本 __my_mega_array_begin = ABS

我需要从不同的.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(.);
在main.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文件内部的particullar.o文件中没有使用任何节,则整个.o文件将从链接中丢弃,即使使用了KEEP指令

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

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

所以我应该只使用ld脚本和.a文件来完成