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

Sou*_*ble 2 c microcontroller gcc avr avr-gcc

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

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

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

unw*_*ind 7

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

这看起来很尴尬,使用GCC时执行此操作的典型方法如下所述:

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