gpt4 book ai didi

c - 如何解决链接描述文件中的错误?

转载 作者:IT王子 更新时间:2023-10-29 00:41:49 27 4
gpt4 key购买 nike

我创建了一个内存链接器脚本并将其保存为 eclipse ide 中的 memory.ld:项目:属性:gcc 链接器:杂项:我添加了 -M -T memory.ld

内存.ld :

    MEMORY
{
ram (rw) : ORIGIN = 0x4000000 , LENGTH = 2M
}

SECTIONS
{
RAM : { *(.myvarloc)

} > ram }

在我的 C 程序中:我做了一个全局声明:

__attribute__ ((section(".myvarloc")))

uint8 measurements [30];

错误:

/usr/bin/ld: FEBRUARY section `.text' will not fit in region `ram'
/usr/bin/ld: region `ram' overflowed by 20018 bytes
/usr/lib/i386-linux-gnu/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init':
(.text+0x2b): undefined reference to `__init_array_end'
/usr/lib/i386-linux-gnu/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init':
(.text+0x31): undefined reference to `__init_array_start'
/usr/lib/i386-linux-gnu/libc_nonshared.a(elf-init.oS): In function `__libc_csu_init':
(.text+0x57): undefined reference to `__init_array_start'
/usr/bin/ld: FEBRUARY: hidden symbol `__init_array_end' isn't defined
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

最佳答案

根据您使用的编译器(GCC?)和您正在编译的处理器(x86?),编译器将在目标文件中生成多个段引用。最常见的是用于代码段的 .text,用于初始化数据的 .data 和用于未初始化数据的 .bss。您可以通过对目标文件使用 nm 实用程序来查看编译器生成了哪些段。
我假设在您提供自己的链接描述文件之前,环境已经自动和/或隐式提供了一些默认脚本。但既然你决定“自己动手”,你就必须自己处理所有细节。

我无法验证细节,但您可以从以下部分开始:

SECTIONS
{
.bss : { *(.myvarloc) }
.bss : { *(.bss) }
.data : { *(.data) }
.text : { *(.text) }
}

我不确定这是否是您的 GCC 链接器的确切语法(它在一定程度上取决于版本),但您可以在 the manual 中找到更多信息。 .

关于c - 如何解决链接描述文件中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704208/

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