gpt4 book ai didi

c - 使用简单的链接器脚本给出 "relocation truncated to fit: R_X86_64_32S"

转载 作者:行者123 更新时间:2023-11-30 15:38:20 24 4
gpt4 key购买 nike

我正在尝试在 amd-64 Linux 机器上使用自定义链接器脚本编译这个简单的程序

// main.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
printf("Hello World!\n");
int* x = malloc(sizeof(int));
while(1) {}
return 0;
}

// script.ld 
SECTIONS
{
. = 0x100000000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
}

但是如果我这样做gcc -T script.ld main.c -o main,我得到很多错误,例如

/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x12): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_fini' defined in .text section in /usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS)

最佳答案

您正在尝试将 main 链接到 0x100000000,该值超出 4GB 边界,但 GCC(和您的 libc)尚未设置对于-mcmodel=large

默认值为-mcmodel=medium,这意味着程序链接到较低的2GB地址空间。

您需要使用 -mcmodel=large 构建 main.c crt1.o命令将您的可执行文件链接到 0x100000000

或者仅使用 -fPIE-pie,您的可执行文件将加载到任意(但通常远高于 4GB 边界)地址。

关于c - 使用简单的链接器脚本给出 "relocation truncated to fit: R_X86_64_32S",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21796637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com