今天在cargo buiild编译项目时出现问题:
rust-lld: error: section .rodata..L__unnamed_83 virtual address range overlaps with .text._ZN4core3ptr5write17hde8e01753aaa44ebE
>>> .rodata..L__unnamed_83 range is [0x40084CD8, 0x40084D1F]
>>> .text._ZN4core3ptr5write17hde8e01753aaa44ebE range is [0x40084D10, 0x40084D33]
报了一堆这种错误
我的.ld文件如下:
ENTRY(_start)
SECTIONS
{
. = 0x40080000;
.text.boot : { *(.text.boot) }
.text :
{
KEEP(*(.text.boot))
*(.text.exceptions)
. = ALIGN(4096); /* align for exceptions_vector_table*/
*(.text.exceptions_vector_table)
*(.text)
}
.data : {
*(.data)
}
.rodata : {
*(.rodata)
}
.bss : {
*(.bss)
}
. = ALIGN(8);
. = . + 0x4000;
LD_STACK_PTR = .;
}
在网上查阅资料未果,问gpt得到的答案是没有text段没对齐,但是用. = ALIGN(8);对齐了之后也是一样的问题。
研究了半天,感觉还是内存段分配不足导致的,尝试修改. = . + 0x4000;为. = . + 0xA000;后发现问题解决了,感觉有点神奇。
由于对系统理解较浅,暂不清楚具体原因。

344

被折叠的 条评论
为什么被折叠?



