对于嵌入式应用程序,我需要在NV RAM中存储从相同代码库编译的两个库-只是具有不同的编译标志。在运行(或加载)时,我计划使用单个入口点来选择(加载/执行)相关的库。
由于只有一个入口点,为了避免复杂性,我希望保持静态链接。但是,为了做到这一点,我需要区分每个库的符号。
我用的是GCC的工具链。
如何“干预”编译/链接过程,以便为链接器使用的每个库的符号添加不同的前缀?
或者,你可以提出另一种方法来实现我需要的东西吗?
提前谢谢。
发布于 2017-06-29 02:36:02
有一个很好的方法可以做到这一点。当然,在运行时的主代码中,您希望避免任何决定使用哪个库,所以在运行时做出任何决定都是一个非常糟糕的设计选择。在引用不同的静态库时使用各种垃圾函数指针和#ifdef使得代码不可维护、不可读和不可伸缩。
因此,正确的方法之一是使用库的动态绑定+独立接口(抽象层)作为静态库。只要你的接口被初始化,它就会决定加载哪个dll。因此,您可以将要使用的库背后的逻辑放到相应抽象层的正确位置。
// main code
// |
// lib_proxy.lib (static)
// / \
// lib1.dll lib2.dll (dynamic)注(观点):当然,另一种方法是使用不同的构建脚本,但它被多次证明,至少对我来说,这是对整个项目进行集群的最好方法之一。
https://stackoverflow.com/questions/44785908
复制相似问题