【问题标题】:Relocate specific object files of a library重定位库的特定目标文件
【发布时间】:2024-04-25 07:25:02
【问题描述】:

我有一个针对 ARM Cortex-M3 的 GCC 项目。链接描述文件定义了每个源代码段的位置。所以我有这样的部分

.text : 
{
    *(.text)
} > FLASH
_sidata = .;
.data : AT (_sidata)
{
    _sdata = .;
    *(.data)
    _edata = .;
}

项目使用库lib.a,其中包含目标文件object.oother.o。现在我希望将object.o 的.text 部分放在_sdata 和_edata 之间。目的是这些部分将由启动代码从 FLASH 复制到 RAM 并在那里执行。 other.o 不应放在该部分,因为它太大了。

我试过in this SO question

.data : AT (_sidata)
{
    _sdata = .;
    *(.data)
    object.o(.text)
    _edata = .;
}

但这失败了,因为 object.o 是从库中获取的,不能直接使用。

【问题讨论】:

    标签: gcc ld


    【解决方案1】:

    我自己找到的。必须指定库。

    .data : AT (_sidata)
    {
        _sdata = .;
        *(.data)
        lib.a:object.o(.text)
        _edata = .;
    }
    

    【讨论】: