gpt4 book ai didi

c - 将链接器脚本文件链接到源代码

转载 作者:太空狗 更新时间:2023-10-29 15:01:30 24 4
gpt4 key购买 nike

我是 GNU 编译器的新手。

我有一个 C 源代码文件,其中包含一些结构和变量,我需要在其中将某些变量放在特定位置。

因此,我编写了一个链接器脚本文件,并在 C 源代码中的变量声明中使用了 __ attribute__("SECTION")

我正在使用 GNU 编译器 (cygwin) 编译源代码并使用 -objcopy 选项创建一个 .hex 文件,但我不知道如何在编译时将我的链接器脚本文件链接到相应地重新定位变量。

我附上链接描述文件和 C 源文件以供引用。

请帮助我将链接描述文件链接到我的源代码,同时使用 GNU 创建 .hex 文件。

/*linker script file*/
/*defining memory regions*/

MEMORY
{
base_table_ram : org = 0x00700000, len = 0x00000100 /*base table area for BASE table*/
mem2 : org =0x00800200, len = 0x00000300 /* other structure variables*/
}
/*Sections directive definitions*/

SECTIONS
{
BASE_TABLE : { } > base_table_ram

GROUP :
{
.text : { } { *(SEG_HEADER) }
.data : { } { *(SEG_HEADER) }
.bss : { } { *(SEG_HEADER) }

} > mem2

}

C源代码:

const UINT8 un8_Offset_1 __attribute__((section("BASE_TABLE")))  = 0x1A; 
const UINT8 un8_Offset_2 __attribute__((section("BASE_TABLE"))) = 0x2A;
const UINT8 un8_Offset_3 __attribute__((section("BASE_TABLE"))) = 0x3A;
const UINT8 un8_Offset_4 __attribute__((section("BASE_TABLE"))) = 0x4A;
const UINT8 un8_Offset_5 __attribute__((section("BASE_TABLE"))) = 0x5A;
const UINT8 un8_Offset_6 __attribute__((section("SEG_HEADER"))) = 0x6A;

我的意图是将“BASE_TABLE”部分的变量放置在链接描述文件中定义的地址中,其余变量放置在上面链接描述文件中定义的“SEG_HEADER”中。

但是在编译之后,当我查看 .hex 文件时,不同的部分变量位于不同的十六进制记录中,地址为 0x00,而不是链接器脚本文件中给出的地址。

请帮助我将链接描述文件链接到源代码。

是否有任何命令行选项来链接链接器脚本文件,如果有,请向我提供如何使用这些选项的信息。

提前致谢

SureshDN。

最佳答案

尝试 gcc -Xlinker -T(链接器脚本名称)(c 源文件)

关于c - 将链接器脚本文件链接到源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2537069/

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