Я получил ошибку перемещения компоновщика
relocation R_AARCH64_ADR_PREL_PG_HI21 out of range: 8556371968 is not in [-4294967296, 4294967295]
Существует код, который использует этот перемещенный символ (упрощенный, не фактический, но достаточно, чтобы понять)
extern "C" extern void* memOffset;
void* getAddress(const void* addr)
{
return (void*)((uintptr_t)addr + (uintptr_t)&memOffset);
}
memOffset
предоставляется через скрипт компоновщика и рассчитывается как: memOffset = addr1 - addr2;
Хорошо, когда разница адресов превышает 32b, возникает ошибка перемещения.
Есть ли способ предоставить эту полноразмерную переменную 'offset' 64b, как символ сценария компоновщика?
Спасибо
PS: Мне интересно сохранить в коде один символ 'offset', а не обходной путь, подобный передаче адресов (addr1
& addr2
), и вычислить смещение адресов во время выполнения.