Расширить динамически связанную общую библиотеку?

Я новичок в C, так что извините за недостаток знаний (моя C-книга здесь очень большая :)

Я хотел бы расширить разделяемую библиотеку (libcustomer.so) с закрытым исходным кодом, но общедоступным API.

Возможно ли что-то подобное?

переименуйте libcustomer.so в liboldcustomer.soсоздать расширенную разделяемую библиотеку libcustomer.so (чтобы другие неявно использовали расширенную)ссылка liboldcustomer.so в мой расширенный libcustomer.so через -loldcustomerпересылать любые не реализованные методы напрямую в старый "liboldcustomer.so"

Я не думаю, что это будет работать таким образом (название скомпилировано в .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, но как мне «пройти» структуры?

Большое спасибо за ваше время и помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос