如何创建一个链接器只链接我的程序使用的函数的库?

时间:2017-03-03 10:16:26

标签: c gcc microcontroller avr avr-gcc

我正在为 8位AVR微控制器(AVR-GCC) 编译应用程序。要减少微控制器中的闪存使用量,链接器必须仅链接应用程序代码使用的函数。我正在写自己的图书馆,我发现了以下声明。

"为每个代码模块编写一个函数。这将编译为每个对象模块的一个函数" - 来源:http://nongnu.org/avr-libc/user-manual/library.html

这是什么意思? 如何为每个函数创建单独的目标文件?现在我的库中只有一个.h文件和一个.c文件。

1 个答案:

答案 0 :(得分:7)

"每个代码模块一个功能"表示每个C源文件一个函数。这将为每个函数提供一个目标文件。

这看起来很尴尬,使用GCC时执行此操作的典型方法是as described here

  1. 使用-fdata-sections -ffunction-sections选项进行编译,告诉GCC将数据和函数放在不同的部分中。截面只是目标文件中的一个概念,基本上是一个独立的区域。单个目标文件可以包含许多部分。
  2. 然后与--gc-sections链接,告诉链接器垃圾收集未使用的部分。这将删除死代码。