gpt4 book ai didi

embedded - 为什么链接描述文件会有多个部分命令?

转载 作者:行者123 更新时间:2023-12-01 00:13:36 24 4
gpt4 key购买 nike

我一直在阅读sections documentation for ld有什么不清楚的。

鉴于部分链接器脚本:

MEMORY
{
FLASH1 (rx) : ORIGIN = 0x000FB000, LENGTH = 0x05000
FLASH2 (r) : ORIGIN = 0x000FA000, LENGTH = 0x01000
}

SECTIONS
{
.some_code :
{
KEEP(*(SORT(.some_code*)))
} > FLASH1
}
SECTIONS
{
.my_page :
{
KEEP(*(SORT(.my_page*)))
} > FLASH2
}

是否有理由在上述单个链接描述文件中包含 2 个部分命令,而不是将其全部包含在如下所示的 1 个部分命令中?
SECTIONS
{
.some_code :
{
KEEP(*(SORT(.some_code*)))
} > FLASH1
.my_page :
{
KEEP(*(SORT(.my_page*)))
} > FLASH2
}

或者它们是等价的。还有其他情况您想像这样拆分吗?

附加说明:我要求有单独的“SECTIONS”命令(每个命令都有自己的部分定义块),而不是要求一般有单独部分的原因。

最佳答案

从来没有不可避免的需要写多个 SECTIONS命令,
MEMORY命令,在链接描述文件中。

SECTIONS
{
/* Commands... */
}
SECTIONS
{
/* More commands... */
}

相当于:
SECTIONS
{
/* Commands... */
/* More commands... */
}
MEMORY 也是如此.

然而,一个非平凡的链接描述文件体的可维护性是
如果链接描述文件可以包含多个 SECTIONSMEMORY命令。例如。如果:

foob​​ar.lds (1)
MEMORY
{
FOOMEM (rx) : ORIGIN = 0x000FB000, LENGTH = 0x05000
BARMEM (r) : ORIGIN = 0x000FA000, LENGTH = 0x01000
}

SECTIONS
{
.foo : {
*(.foo)
} > FOOMEM
.bar : {
*(.bar)
} > BARMEM
}

比现在更重要的事情,它可能更好地重构为:

foob​​ar.lds (2)
INCLUDE ./foo.lds
INCLUDE ./bar.lds

foo.lds
MEMORY
{
FOOMEM (rx) : ORIGIN = 0x000FB000, LENGTH = 0x05000
}

SECTIONS
{
.foo : {
*(.foo)
} > FOOMEM
}

bar.lds
MEMORY
{
BARMEM (r) : ORIGIN = 0x000FA000, LENGTH = 0x01000
}

SECTIONS
{
.bar : {
*(.bar)
} > BARMEM
}

以便 foobar.lds (2) 被链接器扩展为

foob​​ar.lds (3)
MEMORY
{
FOOMEM (rx) : ORIGIN = 0x000FB000, LENGTH = 0x05000
}

SECTIONS
{
.foo : {
*(.foo)
} > FOOMEM
}

MEMORY
{
BARMEM (r) : ORIGIN = 0x000FA000, LENGTH = 0x01000
}

SECTIONS
{
.bar : {
*(.bar)
} > BARMEM
}

历史笔记:在 this obselete GNU ld manual from bygone days ,
我们可以找到约束条件:

You may use at most one SECTIONS command in a script file, but you can have as many statements within it as you wish.



和:

A command file may contain at most one use of the MEMORY command; however, you can define as many blocks of memory within it as you wish.



the current manual 中没有的.

关于embedded - 为什么链接描述文件会有多个部分命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55638429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com