Расширить динамически связанную общую библиотеку?
Я новичок в 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, но как мне «пройти» структуры?
Большое спасибо за ваше время и помощь!