在C语言中动态选择库模块的方法
我想了解一些常用于在C中配置库的模式的信息 我想介绍一些关于图书馆的概念,这样我可以为这个问题提供一些背景知识。这个库是为嵌入式系统设计的,所以我们使用了仔细考虑的方法(以及一些技巧性的不太好的方法)来保持库的轻巧和功能丰富 该库由模块组成,这些模块在很大程度上被设计为尽可能地解耦。有些交叉依赖是必需的,有些是可选的(这是一个重要的注意事项)。我的意思是,当其他模块存在时,一些模块会变得更高级,但是与其强迫用户包含他们不需要的模块(保持较小的占地面积),还可以忽略高级功能。下面是一个很好的例子。UART模块有一个UART_Tick方法,需要调用该方法来定期处理传入数据和错误。如果项目中包含了任务(一个简单的调度程序)模块,那么UART模块将调度任务本身,而用户不必再调用UART_Tick函数,而不需要总是担心这一点。然而,为了保持轻松,只有在使用任务模块的情况下才会安排任务 现在让我来解释一下,到目前为止,我是如何摆脱这类事情的,以及为什么我不喜欢它 每个项目都有一个system.h文件。下面是system.h提供的内容在C语言中动态选择库模块的方法,c,module,dependencies,c-preprocessor,C,Module,Dependencies,C Preprocessor,我想了解一些常用于在C中配置库的模式的信息 我想介绍一些关于图书馆的概念,这样我可以为这个问题提供一些背景知识。这个库是为嵌入式系统设计的,所以我们使用了仔细考虑的方法(以及一些技巧性的不太好的方法)来保持库的轻巧和功能丰富 该库由模块组成,这些模块在很大程度上被设计为尽可能地解耦。有些交叉依赖是必需的,有些是可选的(这是一个重要的注意事项)。我的意思是,当其他模块存在时,一些模块会变得更高级,但是与其强迫用户包含他们不需要的模块(保持较小的占地面积),还可以忽略高级功能。下面是一个很好的例子。
#define UART1_BAUD 115200
这将UART 1通道配置为波特率为115200。很简单#include "library.h"
#include "uart.h"
#include "system.h"
我知道我可能找不到完美的解决方案,但我希望有任何经验/想法/观点能够激发出比我现有的更好的解决方案 这个问题可能更适合您。您可以使用dlopen/dlsym/dlerror/dlclose函数动态打开共享库并访问库中的函数。@luserdroog在引用其他站点时,指出一种方法可能是构建大量小型库并在链接(或运行)时选择模块,这通常是有帮助的时间您仍然需要为每个目标系统编译库,但是用户可以选择他们想要的模块,而无需重新编译,只需根据他们关心的部分进行链接。