CMSIS DSP 的选择性链接?

问题描述 投票:0回答:1

我的基于 ARM 的应用程序报告超过 1,250,000 字节的程序内存,但其中大部分是 .rodata(“只读常量”)而不是代码。我在 .map 文件中找到了这个:

.rodata%268     0x00407318    0xe0b38
 .rodata        0x00407318    0xe0b38 ..\src\packs\CMSIS\CMSIS\DSP\Lib\GCC\libarm_cortexM7lfdp_math.a(commontables.o)
                0x00407318                arm_rfft_sR_q15_len8192
                0x00407330                arm_rfft_sR_q15_len4096
                0x00407348                arm_rfft_sR_q15_len2048
                0x00407360                arm_rfft_sR_q15_len1024
                0x00407378                arm_rfft_sR_q15_len512
                0x00407390                arm_rfft_sR_q15_len256
...

链接器似乎正在为 CMSIS DSP 库拖动 0xeb038 (962616) 字节的 RO 数据。是否有一个链接器选项(或其他一些技术)只能加载所使用的表?

linker elf cmsis
1个回答
0
投票

是否有一个链接器选项只能加载所使用的表

是的,这就是链接器默认执行的操作!

您真正的问题应该是:“为什么这些东西(我认为未使用过)最终会出现在我的二进制文件中”?

要回答这个问题,您可以使用链接器

-y
标志。来自
man ld

  -y symbol
  --trace-symbol=symbol
      Print the name of each linked file in which symbol appears.

因此,如果您使用

-Wl,-y,arm_rfft_sR_q15_len8192
重新链接二进制文件,您将找到哪个代码(哪个其他符号)使用该符号。对其他符号重复此操作,您最终会找到导致
arm_rfft_sR_q15_len8192
被链接的代码。

附注这里很好地描述了与档案库的链接如何工作。

© www.soinside.com 2019 - 2024. All rights reserved.