我正在创建一个GNU .ld链接器脚本,并且想要象征性地定义某些内存段的起源。以下不工作:为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到工作中使用硬编码值,你在使用 – wds
根据Eclipse版本,它使用:?” GNU ARM C/C++编译器\t 2.4。 1.201704251808 \t ilg.gnuarmeclipse.managedbuild.cross.feature.group \t Liviu Ionescu“ 不清楚它使用的链接器的特定版本 –