库中的.text、.data、.bss .a 文件可以分成单独的部分吗
can .text, .data, .bss from a library .a file be separated into separate sections
我的问题是在链接描述文件中定位库 .a 文件。正常的链接描述文件由 .text、.data、.rodata 和 .bss 部分组成。
.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
我想知道的是 libc.a 等库中的 .text、.data、.rodata 和 .bss 部分是否可以与其他部分分开放置?将 .text 放在不同的区域是通过 *\libc.a:*
完成的,但是 .data、.rodata 和 .bss 如何重新定位?
.text1 :
{
*\libc.a:* //.text from libc.a is placed into rom1 instead of rom
} > rom1
我预计放置 .data、.rodata 和 .bss 的答案可能具有类似的语法,但下面的语法是错误的,因为 libc.a 部分仍在 ram 和 rom 而不是 ram1 和 rom1。
.text1 :
{
*\libc.a:*(.text .text.*) // libc.a.text still resides in rom
*\libc.a:*(.rodata .rodata.*) // libc.a.rodata still resides in rom
} > rom1
.data1 :
{
*\libc.a:*(.data .data.*) // libc.a.data still resides in ram
} > ram1 AT > rom1
.bss1 (NOLOAD) :
{
*\libc.a:*(.bss .bss.*) // libc.a.bss still resides in ram
} > ram1
是否有任何提示可以将 .a 文件中的 .data、.rodata 和 .bss 分成各自的部分?
这取决于您构建库的方式或是否重新链接它。您可以通过直接构建 libc 或首先使用中间链接器脚本重新链接目标文件来命名这些部分。text.libc.*。
*\libc.a: ... 语法我相信只有当您使用 libc.a.
中所有文件的实际 *.o 名称时才有效
注意:Gcc 也有一些选项可以自动将代码放入子部分,比如每个函数一个部分。注意不要让事情与那个不兼容。
我的问题是在链接描述文件中定位库 .a 文件。正常的链接描述文件由 .text、.data、.rodata 和 .bss 部分组成。
.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
我想知道的是 libc.a 等库中的 .text、.data、.rodata 和 .bss 部分是否可以与其他部分分开放置?将 .text 放在不同的区域是通过 *\libc.a:*
完成的,但是 .data、.rodata 和 .bss 如何重新定位?
.text1 :
{
*\libc.a:* //.text from libc.a is placed into rom1 instead of rom
} > rom1
我预计放置 .data、.rodata 和 .bss 的答案可能具有类似的语法,但下面的语法是错误的,因为 libc.a 部分仍在 ram 和 rom 而不是 ram1 和 rom1。
.text1 :
{
*\libc.a:*(.text .text.*) // libc.a.text still resides in rom
*\libc.a:*(.rodata .rodata.*) // libc.a.rodata still resides in rom
} > rom1
.data1 :
{
*\libc.a:*(.data .data.*) // libc.a.data still resides in ram
} > ram1 AT > rom1
.bss1 (NOLOAD) :
{
*\libc.a:*(.bss .bss.*) // libc.a.bss still resides in ram
} > ram1
是否有任何提示可以将 .a 文件中的 .data、.rodata 和 .bss 分成各自的部分?
这取决于您构建库的方式或是否重新链接它。您可以通过直接构建 libc 或首先使用中间链接器脚本重新链接目标文件来命名这些部分。text.libc.*。
*\libc.a: ... 语法我相信只有当您使用 libc.a.
中所有文件的实际 *.o 名称时才有效注意:Gcc 也有一些选项可以自动将代码放入子部分,比如每个函数一个部分。注意不要让事情与那个不兼容。