可以将.text,.data,.bss从库.a文件分成不同的部分

时间:2018-06-05 14:15:28

标签: c file linker sections

我的问题是在链接器脚本中找到库.a文件。使用.text,.data,.rodata和.bss部分安排普通的链接描述文件。

Connection

我想知道的是,libc.a这样的库中的.text,.data,.rodata和.bss部分是否可以放在与其余部分不同的区域?将.text放在不同的区域是通过.text : { *(.text .text.*) *(.rodata .rodata*) /* global const uint32_t i = 10 for example */ } > rom .data : { *(.data .data.*) } > ram AT > rom .bss (NOLOAD) : { *(.bss .bss.*) } > ram 完成的,但.data,.rodata和.bss是如何重新定位的?

*\libc.a:*

我预计放置.data,.rodata和.bss的答案可能是类似的语法,但下面的语法是错误的,因为libc.a部分仍然在ram和rom而不是ram1和rom1。

.text1 :
{
    *\libc.a:* //.text from libc.a is placed into rom1 instead of rom 
} > rom1

是否有任何提示将.data,.rodata和.bss从.a文件中分离到自己的部分?

1 个答案:

答案 0 :(得分:1)

这取决于您如何构建库或重新链接它。您可以通过直接构建libc或通过使用中间链接描述文件重新链接目标文件来命名.text.libc。*部分。

* \ libc.a:...语法我认为只有在使用libc.a中所有文件的实际* .o名称时才有效。

注意:Gcc还有一些选项可以自动将代码放入子部分,例如每个函数一个部分。注意不要让事情与之不相容。