【发布时间】:2021-04-22 02:41:54
【问题描述】:
我想知道是否有办法删除使用 C 开发的嵌入式项目的映射文件中列出的所有未使用的函数,并使用适用于 ARM IDE 的 IAR 嵌入式工作台,它使用自己的编译器和链接器:
IAR C/C++ Compiler for ARM 8.30
IAR ELF Linker for ARM 8.30
IAR Assembler for ARM 8.30
我注意到map文件中列出的函数并不是所有的函数都是在运行时实际使用的函数,有什么优化方法可以删除所有未使用的函数吗?
例如,项目中使用了第三个库,FuncA() 是其中的一部分,其中可能有一个 switch case,并且对于每个 case 调用不同的 static 函数,比如说@ 987654323@,FuncA2(),...FuncAn()。我们将根据FuncA() 的代码和用法输入每个案例,因此很明显,并非所有FuncA1()、FuncA2()、...FuncAn() 函数都会在项目中被调用,但是,所有地图文件中列出了它们。
是否可以从地图文件中删除这些功能?如果是怎么办?
【问题讨论】:
-
可能是库函数调用了它们。可能是它们位于一个目标文件中,其中使用了其中一个函数,而其他一些或全部未使用。
-
@JonathanLeffler 谢谢,没有库函数调用它。那么,您是说属于一个目标文件的所有函数都将列在映射文件中,而不管项目中实际调用了哪个函数?
-
@NEO 我确实遵循了您在第二段中的论点。能否说的更清楚些或提供一个具体的代码示例及其关联的地图文件?
-
它依赖于工具链而不是 C 语言问题 - 你的工具链是什么?
-
IAR 是一家公司,而不是工具链。他们为不止一种架构制作工具链。那就是说我不熟悉IAR。但是,重新阅读您的论点(仍不清楚),我认为您认为可以删除这些功能的假设是有缺陷的。我会更新我的答案,但我可能会误解你的论点 - 你没有包含代码示例。
标签: c optimization embedded iar map-files