扩展动态链接共享库?

时间:2013-01-21 23:01:08

标签: c shared-libraries extending

我是C的新人,对于我缺乏知识感到抱歉(我的C-book非常庞大:)

我想扩展一个带有封闭源的共享库(libcustomer.so),但是公知的api。

这样的事情可能吗?

  1. 将libcustomer.so重命名为liboldcustomer.so
  2. 创建扩展共享库libcustomer.so(以便其他人隐式使用扩展库)
  3. 通过-loldcustomer将liboldcustomer.so链接到我的扩展libcustomer.so
  4. 将任何未经过额外实施的方法直接转发给旧的“liboldcustomer.so”
  5. 我认为它不会那样工作(名称被编译成.so,不是吗?)。 但是替代方案是什么?

    对于#4:是否有一般的方法来做到这一点,或者我是否必须编写一个名为旧的方法并转发呼叫(如何?)?

    因为原始的libcustomer.so(= liboldcustomer.so)可能会不时发生变化,所有这些东西都应该动态地工作。

    出于安全考虑,我们的系统没有LD_PRELOAD(否则我会接受:()。

    考虑扩展验证检查&一些更好的NPE处理。

    提前感谢您的帮助!

    编辑:

    我正在实施我的扩展程序,如答案所示,但目前我还有一个未处理的案例:

    如何从扩展库“代理”结构?

    例如我有这个:

    customer.h:

    struct customer;
    

    customer.c:

    struct customer {
        int children:1;
        int age;
        struct house *house_config;
    };
    

    现在,在我的customer-extension.c中,我正在编写customer.c的所有公共方法,但是如何“传递”结构?

    非常感谢你的时间和帮助!

0 个答案:

没有答案