Unisci più librerie condivise .so

che ho a.so e b.so. Posso produrre c.so come una singola libreria condivisa con tutte le funzioni esportate da aeb, ovviamente risolvendo tutte le interdipendenze (cioè tutte le funzioni di b.so chiamate da a.so e viceversa)?

Provai

  gcc -shared -Wl, soname, c.so -o c.so a.so b.so 

ma non funziona.

Lo stesso vale se archivo ao bo in aa e ba (che non dovrebbero modificare ao bo), e lo fanno

  gcc -shared -Wl, soname, c.so -o c.so aa ba 

Grazie

L’unione di più librerie condivise in un’unica soluzione è praticamente imansible su tutti gli UNIXen, ad eccezione di AIX: il linker considera il prodotto .so un prodotto “finale”.

Ma unire gli archivi in ​​.so non dovrebbe essere un problema:

gcc -shared -o c.so -Wl,--whole-archive aa ba -Wl,--no-whole-archive 

In pratica non è ansible.

Dal punto di vista del linker, una libreria SO è un prodotto finale che non contiene le informazioni di trasferimento richieste per il collegamento.

Se si ha accesso a entrambi i file di origine o di object per entrambe le librerie, è semplice compilare / colbind un SO combinato da essi.