我为基于8051微控制器的图形LCD制作了一个C静态库文件(.lib)。在编译之前可以选择一些函数和3种字体(只允许一种字体)。该库应包含一些不同的字体,如:
#if defined FONT1
const uint8_t code font[size1] = { /* Font1 Data*/ }
#elif defined FONT2
const uint8_t code font[size2] = { /* Font2 Data*/ }
…
并且最终用户可以通过在给定的“.h”文件中定义它来选择一个所需的字体。当我测试时,不可能通过将上面的代码写为库文件来完成此操作,只需编译一个明显的定义字体。另一方面,由于内存的考虑,一次加载所有3种字体(在最终应用程序中)效率不高。有没有正确的方法呢?
您可以将字体拆分为不同的源文件。然后将每个源文件构建到单独的目标文件(translation unit)中,如果您的链接器足够好,它将丢弃包含未使用的符号的目标文件。
如果丢弃了未使用的目标文件,那么它们的代码和数据当然不会成为最终链接可执行文件的一部分。