【发布时间】:2021-11-17 09:47:45
【问题描述】:
假设我需要将进程的大小加载到内存中,然后在我的代码中定义它:
#include <stdio.h>
ssize_t prog_sz;
int main()
{
printf("%x\n", prog_sz);
}
然后我有一个链接器脚本使用这样的行访问它proc_sz = .
注意:我用我的程序测试的所有链接器脚本总是会产生错误,这就是为什么我只指定脚本中的一行。例如像这样简单的事情,没有我第一次谈到的那一行:
SECTIONS
{
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
}
会产生如下恼人的错误:
/usr/bin/ld: a.out: error: PHDR segment not covered by LOAD segment
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS): in function `__libc_csu_init':
(.text+0x9): undefined reference to `__init_array_start'
/usr/bin/ld: (.text+0x20): undefined reference to `__init_array_end'
/usr/bin/ld: a.out: hidden symbol `__init_array_end' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
即使是 ld info 文档中的示例也会产生令人讨厌的错误。也许你也可以帮我解决这个问题。
【问题讨论】:
标签: c linux compiler-errors linker linker-scripts