我有一个链接器重定位错误
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时,将发生重定位错误。
有没有办法像链接程序脚本符号一样提供此完整的64b'offset'变量?
谢谢
PS:我对保持一个符号“偏移量”很感兴趣,而不是像在代码中传递地址(addr1
和addr2
)并在运行时计算地址偏移量那样的解决方法。