如何将不同 .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 文件来做到这一点。
I need to collect some data from different .a files to one array.
I do it by collecting data to one section
first .c file
TArElement __attribute__((section(".my.special.section"))) uwiveuve = { ...
second .c file
TArElement __attribute__((section(".my.special.section"))) egwegwxb = { ...
etc.
in ld script
__my_mega_array_begin = ABSOLUTE(.);
KEEP(*(.my.special.section))
__my_mega_array_end = ABSOLUTE(.);
in main .c file
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;
So anyone can link his code with my code, and my code will know about data in his code.
Ok, it works, but not actually... The problem is that KEEP directive works completely with .o files, but not .a . if no sections is used in particullar .o file inside of .a file, then whole .o file will be discarded from linking even though KEEP directive is used.
Using of --whole-arhive option to ld will help, but I'm not allowed to use this option for some reasons. I should do all with ld script file only...
Another way to solve problem is to use partial linking, by creating relocatable file. So all .o files inside of .a will linked to one .o file. But I'm not allowed to use partial linking either.
So I should do it only by using ld script and using .a file.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论