gcc - GCC -T 链接选项问题
问题描述
我已经用 arm-none-eabi-gcc 编译了项目以使用命令来反对
arm-none-eabi-gcc --specs=nosys.specs -mcpu=cortex-m7 -mtune=cortex-m7 -Os -g -gdwarf-2 -c $< -o $(@)
目前,当我尝试将其与对象文件夹中的命令链接时,我得到了对象文件
arm-none-eabi-gcc --specs=nosys.specs -mcpu=cortex-m7 -mtune=cortex-m7 -g -gdwarf-2 -nostartfiles -T ..\project.ld -o target *
但是我遇到了一些奇怪的错误
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text.memcmp'
我知道当我使用 -T 选项时,将使用链接脚本文件而不是默认链接脚本。似乎缺少某些内置函数的部分定义。我试图修复那个put
.text.memcmp : {*(.text.memcmp)}
在我的 ld 文件中,这部分似乎已修复,但是我遇到了另一个错误:
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text.memset'
所以我不认为将 .text.memset 放入 LD 文件是正确的修复,因为在我将 `.text.memset' 放入 ld 文件后,我又遇到了另一个错误:
arm-none-eabi/bin/ld.exe: error: no memory region specified for loadable section `.text._snprintf_r'
我想我错过了 GCC 中的一些选项来为内置函数创建这些默认部分
这个问题的根本原因是什么以及如何解决这个问题?太感谢了!
更新:在下面添加 LD 文件:
MEMORY {
INIT_SRAM : ORIGIN = 0x34400000, LENGTH = 0x1FB000
INIT_SRAM_NO_CACHEABLE : ORIGIN = 0x3460A000, LENGTH = 0x1DF00
INIT_SRAM_STACK : ORIGIN = 0x34628000, LENGTH = 0x15000
RAM_RSVD : ORIGIN = ., LENGTH = 0
BOOT_TEST : ORIGIN = 0x43840000 LENGTH = 0x50
}
SECTIONS
{
.boot_test : {*(.boot_test)}> BOOT_TEST
.exception_table ALIGN(4) : > {*(.exception_table)}>INIT_SRAM
.startup ALIGN(4) : {*(.startup)}
.ramcode ALIGN(4) : > {*(.ramcode)}
.text ALIGN(4) : { *(.text) }
.ramcode ALIGN(4) : { *(.ramcode) }
.rodata ALIGN(4) : { *(.rodata) }
.data ALIGN(4) : { *(.data) }
.bss ALIGN(16) : { *(.bss) }
_TEST_SESSION_START = .;
.TEST_SESSION :{*(.TEST_SESSION)}
_TEST_SESSION_END = (. - 1);
_Stack_start = .;
__STACK_SIZE = SIZEOF(INIT_SRAM_STACK);
__RAM_NO_CACHEABLE_START = ADDR(INIT_SRAM_NO_CACHEABLE);
}
解决方案
将 .text ALIGN(4) : { *(.text) } 更改为 .text ALIGN(4) : { *(.text) (.text. ) } 可以解决这个 .text.xxx 缺失的问题。
推荐阅读
- java - Maven 不再运行测试
- android-constraintlayout - 在 Jetpack Compose 的约束布局中更正将文本与图像对齐
- ruby-on-rails - 或使用 ActiveRecord 搜索
- openshift - 打开 shift 构建配置与 jenkinsfile
- sharepoint - 如何为我的组织自定义 Delve?
- python - 更快地遍历 df 行
- python - 如何使用 azure cli 和 rest 命令清除设置?
- html - 无法绑定到“matDatePicker”,因为它不是“输入”的属性,尽管导入了所有内容
- flutter - 小部件未在颤动中显示
- google-sheets - Google 表格:如何删除多列中包含重复数据的行?