我的问题是在链接器脚本中找到库.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文件中分离到自己的部分?
答案 0 :(得分:1)
这取决于您如何构建库或重新链接它。您可以通过直接构建libc或通过使用中间链接描述文件重新链接目标文件来命名.text.libc。*部分。
* \ libc.a:...语法我认为只有在使用libc.a中所有文件的实际* .o名称时才有效。
注意:Gcc还有一些选项可以自动将代码放入子部分,例如每个函数一个部分。注意不要让事情与之不相容。