我正在創建一個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「 不清楚它使用的鏈接器的特定版本 –