我正在为 8位AVR微控制器(AVR-GCC) 编译应用程序。要减少微控制器中的闪存使用量,链接器必须仅链接应用程序代码使用的函数。我正在写自己的图书馆,我发现了以下声明。
"为每个代码模块编写一个函数。这将编译为每个对象模块的一个函数" - 来源:http://nongnu.org/avr-libc/user-manual/library.html
这是什么意思? 如何为每个函数创建单独的目标文件?现在我的库中只有一个.h文件和一个.c文件。
答案 0 :(得分:7)
"每个代码模块一个功能"表示每个C源文件一个函数。这将为每个函数提供一个目标文件。
这看起来很尴尬,使用GCC时执行此操作的典型方法是as described here:
-fdata-sections -ffunction-sections
选项进行编译,告诉GCC将数据和函数放在不同的部分中。截面只是目标文件中的一个概念,基本上是一个独立的区域。单个目标文件可以包含许多部分。--gc-sections
链接,告诉链接器垃圾收集未使用的部分。这将删除死代码。