Sono nuovo al C, mi dispiace per la mia mancanza di conoscenza (il mio C-book qui è davvero enorme :)Estendi una libreria condivisa collegata dinamica?
Mi piacerebbe estendere una libreria condivisa (libcustomer.so) con sorgente chiusa, ma pubblica api conosciute.
È possibile qualcosa del genere?
- rinomina libcustomer.so a liboldcustomer.so
- creare un libcustomer.so libreria condivisa estesa (in modo che altri usano implicitamente la distesa)
- collegamento liboldcustomer.so nel mio estesa libcustomer.so via -loldcustomer
- inoltrare eventuali metodi non aggiuntivi attuate direttamente al vecchio "liboldcustomer.so"
non credo che avrebbe funzionato in questo modo (il nome è compilato nel .so, non è vero?). Ma qual è l'alternativa?
Per # 4: c'è un modo generale per farlo, oppure devo scrivere un metodo chiamato come il vecchio e inoltrare la chiamata (come?)?
Poiché il libcustomer.so (= liboldcustomer.so) originale può cambiare di volta in volta, tutta quella roba dovrebbe funzionare in modo dinamico.
Per motivi di sicurezza, il nostro sistema non ha LD_PRELOAD (altrimenti avrei prendere quel :().
Pensateci Extended Validation controlli & alcuni meglio NPE-Handlings.
Grazie in anticipo per il vostro aiuto !
EDIT:
sto solo attuare la mia estensione come indicato nella risposta, ma io ho un caso non gestita in questo momento:
Come posso "proxy" le strutture dalla libreria estesa?
Per esempio io ho questo:
customer.h:
struct customer;
customer.c:
struct customer {
int children:1;
int age;
struct house *house_config;
};
Ora, nel mio cliente extension.c sto scrivendo tutto il metodi pubblici formano customer.c, ma come faccio a "passare-attraverso" le strutture?
Molte grazie per il tuo tempo & aiuto!
La risposta per la prima domanda aggiuntiva è già stata fornita. Il secondo è strettamente correlato - C/C++ non contiene alcuna metainformazione binaria, come Java/.NET, quindi non è possibile indovinare come potrebbe apparire la definizione di una struttura "cliente". Anche se ricordi i tipi e i nomi dei campi in questa struttura, potrebbero esserci problemi con le impostazioni del compilatore, ad esempio l'allineamento dei campi. –
Ok, grazie. Ora proverò la risposta inviata :) –