【发布时间】:2017-10-18 21:59:05
【问题描述】:
我正在创建一个 GNU .ld 链接器脚本,并且想象征性地定义一些内存部分的起源。以下不起作用:
BASE_ADDR = 0x4000;
MEMORY
{
m_interrupts (RX) : ORIGIN = BASE_ADDR, LENGTH = 0x0200
m_bootloader_config (RX) : ORIGIN = BASE_ADDR + 0x3C0, LENGTH = 0x0040
m_text (RX) : ORIGIN = BASE_ADDR + 0x400, LENGTH = 0x10000 - (BASE_ADDR + 0x400)
m_data (RW) : ORIGIN = 0x1FFFF000, LENGTH = 0x4000
}
这会导致以下错误:
Invoking: Cross ARM C++ Linker
../MKL27Z64xxx4_flash.ld:67: nonconstant expression for origin
collect2: error: ld returned 1 exit status
错误是指以下行:
m_interrupts (RX) : ORIGIN = BASE_ADDR, LENGTH = 0x0200
让我感到困惑的是,BASE_ADDR 在我看来相当稳定。我需要调用一些特殊的语法来让ld 相信BASE_ADDR 是不变的吗?
【问题讨论】:
-
这似乎适用于 binutils 2.26。你用的是什么版本?
-
根据 Eclipse,它使用的是:“GNU ARM C/C++ Cross Compiler 2.4.1.201704251808 ilg.gnuarmeclipse.managedbuild.cross.feature.group Liviu Ionescu” 不清楚它使用的是哪个特定版本的链接器.