c - 静态 C 库中的选择性变量定义

标签 c static-libraries lib

我正在为基于 8051 微 Controller 的图形 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 )中,如果您的链接器足够好,它将丢弃包含未使用符号的目标文件。

如果未使用的目标文件被丢弃,那么它们中的代码和数据当然不会成为最终链接的可执行文件的一部分。

关于c - 静态 C 库中的选择性变量定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52277064/

相关文章:

c - 将字符数组指定为函数参数的正确语法是什么?

C++ FatFs 未定义的函数引用

c++ - 使用 g++ 从 cpp 文件和静态库创建共享库

c++ - 仅在调试期间在 C++ 中初始化 matlab 编译器 dll/lib 时发生访问冲突

java - 如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项

c - C程序中的非法初始化

c - 预处理器

unix - 在* nix上确定静态库cpu体系结构

c# - 是否可以在 C# 中使用全局方法

找不到/lib64/ld-linux-x86-64.so.2