我需要从不同的.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文件。