如何创建一个库,其中链接器仅链接我的程序使用的函数?

How do I create a library where the linker only links functions used by my program?

我正在为 8 位 AVR 微控制器 (AVR-GCC) 编译应用程序。为了减少微控制器中闪存的使用,链接器只链接应用程序代码使用的函数是很重要的。我正在编写自己的库,并且遇到了以下语句。

"Write one function per code module. This will compile to one function per object module" - 来源:http://nongnu.org/avr-libc/user-manual/library.html

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

"One function per code module" 表示每个 C 源文件一个函数。这将为每个函数提供一个目标文件。

这看起来很尴尬,使用 GCC 时的典型方法是 as described here:

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