从相同的代码库编译2个库

时间:2017-06-27 16:57:33

标签: gcc embedded

对于嵌入式应用程序,我需要从相同的代码库中编译2个库 - 只有不同的编译标志 - 存储在NV RAM中。在运行(或加载)时,我计划有一个入口点,选择(加载/执行)相关库。

由于只有一个入口点,为了避免复杂性,我想保持静态链接。但是,为此,我需要区分每个库的符号与另一个库的符号。

我使用GCC作为工具链 如何通过编译/链接过程“干预”来添加 - 例如 - 链接器将使用的每个库的符号的不同前缀?
或者,您可以通过提出另一种方法来实现我的需求吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

有一种很好的方法可以做到这一点。当然,在运行时的主代码中,您希望避免决定使用哪个库,因此在运行时做出的任何决策都是一个非常糟糕的设计选择。使用类似函数指针的所有类型的垃圾和#ifdef引用不同的静态库会使代码无法维护,不可读且无法扩展。

因此,正确的方法之一是使用库+独立接口(抽象级别)的动态绑定作为静态库。无论何时初始化接口,它都会决定加载什么dll。因此,您将逻辑放在正确位置的lib后面的相应抽象层中。

//           main code
//               |
//          lib_proxy.lib (static)
//           /       \ 
//      lib1.dll   lib2.dll (dynamic)
NB(意见):当然,另一种方法是使用不同的构建脚本,但至少对我来说,它已经多次被证明,这是整个项目的最佳方法之一。