无法使用GCC将特殊节映射到图像箱中的指定位置

无法使用GCC将特殊节映射到图像箱中的指定位置,gcc,Gcc,我在我的程序中定义了一个特殊的数据部分,如下所示: const qlEntry GADLENTRY __attribute__((section(".initdata"))) = { //... } 我想把这个特殊的部分放在图像箱的标题里 我的.ld文件是这样写的 MEMORY { rom (rx) : ORIGIN = 0x08540000, LENGTH = 0x100000 ram (rwx) : ORIGIN = 0xA0200000, LENGTH = 0

我在我的程序中定义了一个特殊的数据部分,如下所示:

const qlEntry GADLENTRY __attribute__((section(".initdata"))) = 
{
    //...
}
我想把这个特殊的部分放在图像箱的标题里

我的.ld文件是这样写的

MEMORY
{
    rom (rx) :  ORIGIN = 0x08540000, LENGTH = 0x100000
    ram (rwx) : ORIGIN = 0xA0200000, LENGTH = 0x200000
}

SECTIONS
{
    . = 0x08540000;
        .rodata : 
{
    *(.initdata)
    *(.rodata)
}
    .data : 
{ 
    *(.data) 
}
    .bss : 
{ 
    *(.bss) 
}
text : 
{ 
    *(.text) 
}
}
}

但是在构建之后,我在.map文件中看到:

.initdata       0x0854b304       0x2c
 .initdata      0x0854b304       0x2c ql_Main.o
                0x0854b304                GADLENTRY
有什么问题吗?我怎样才能得到正确的垃圾箱

 *(.initdata)
 .initdata      0x08540000

.initdata
创建一个单独的输出部分,如:

SECTIONS
{
    . = 0x08540000;

    .initdata : { *(.initdata) }

    .rodata : { *(.rodata) }

...
在原始链接器脚本文件中,在
.initdata
前面放置了其他内容,请在映射文件中检查它是什么

确保已经描述了链接器脚本中的每个输入部分


例如,如果您的输入文件中有
.gnu.linkonce.r*
部分,它们可能会在第一个内存区域中结束,其属性与该部分属性一致,在本例中是
rom
区域,这可能会导致您观察到的内容。

Hi Chill。是的,我在地图文件中找到了.gnu.linkonce.r*。rodata 0x08546d80 0x45b0(.rodata.rodata..gnu.linkonce.r.*)rodata.str1.4 0x08546d80 0x228 hello_world.o 0x22c(放松前的大小)我确实喜欢你说的,但它无法工作。现在,我必须将结构GADLENTRY放在image bin文件的开头。你还有别的建议吗?谢谢