Estender uma biblioteca compartilhada vinculada dinâmica?
Eu sou novo em C, desculpe por minha falta de conhecimento (meu C-book aqui é realmente enorme :)
Eu gostaria de estender uma biblioteca compartilhada (libcustomer.so) com código fechado, mas a API pública conhecida.
É algo assim possível?
renomear libcustomer.so para liboldcustomer.socrie uma biblioteca compartilhada estendida libcustomer.so (para que outros usem implicitamente a estendida)link liboldcustomer.so no meu libcustomer.so estendido via -loldcustomerencaminhar quaisquer métodos não implementados diretamente para o antigo "liboldcustomer.so"Eu não acho que funcionaria assim (o nome é compilado no arquivo .so, não é?). Mas qual é a alternativa?
Para o 4: existe uma maneira geral de fazer isso, ou eu tenho que escrever um método chamado como o antigo e encaminhar a chamada (como?)?
Como o libcustomer.so original (= liboldcustomer.so) pode mudar de tempos em tempos, todas essas coisas devem funcionar dinamicamente.
Por razões de segurança, nosso sistema não tem LD_PRELOAD (caso contrário, eu levaria isso :().
Pense em verificações de validação estendidas e alguns melhores manuseios de NPE.
Agradeço antecipadamente por sua ajuda!
EDITAR:
Estou apenas implementando minha extensão como mostrado na resposta, mas tenho um caso não tratado no momento:
Como posso "proxy" as estruturas da biblioteca estendida?
Por exemplo, eu tenho isso:
customer.h:
struct customer;
customer.c:
struct customer {
int children:1;
int age;
struct house *house_config;
};
Agora, no meu cliente-extension.c Estou escrevendo todos os métodos públicos de customer.c.c, mas como eu "pass-thru" as estruturas?
Muito obrigado pelo seu tempo e ajuda!