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

时间:2011-07-04 08:06:48

标签: 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 = 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文件。

0 个答案:

没有答案