Sto usando una libreria C++ che può essere costruita come libreria condivisa o statica. Questa libreria utilizza una tecnica factory, in cui gli oggetti statici si registrano quando viene avviato il programma e vengono creati gli oggetti statici.Come forzare gcc a collegare oggetti C++ statici senza riferimento da una libreria
Questo funziona bene fino a quando viene utilizzata la libreria condivisa. Quando viene utilizzata la versione statica, nessuno degli oggetti statici viene incluso nel programma finale (perché non viene fatto riferimento direttamente) e quindi la loro funzionalità non è disponibile.
C'è un modo per forzare gcc a includere tutti gli oggetti statici da una libreria durante il collegamento?
La libreria è Open Source e potrei modificarla, se questo aiuta.
-Wl, - l'intero archivio causa l'inclusione di molti simboli già inclusi in altre librerie o alcuni che non possono essere risolti. Esiste un modo più fine per includere la statica? –
Questo non ha senso Gene: è come caricare una libreria condivisa: si ottiene l'intera libreria e nient'altro. Devo dire che ho una nozione sbagliata di trovare riferimenti esterni, quindi è necessario ottenere l'ordine delle cose nel modo giusto. – Yttrill
L'interruzione del comportamento con '-Wl, - no-whole-archive' non è in realtà opzionale, anche se non ci sono più librerie da includere. GCC aggiungerà tutte le librerie di sistema standard alla fine del tuo comando, quindi se lasci '--whole-archive' ne saranno tutti influenzati e causerà il problema del simbolo duplicato @GeneVincent commentato su –