Sto provando a creare una libreria di oggetti condivisa che verrà aperta da un programma usando dlopen(). Questa libreria utilizzerà la funzionalità fornita da una libreria separata che è statica.Come forzare i simboli da una libreria statica da includere in una build di libreria condivisa?
Ho incluso il flag appropriato sulla linea di collegamento per inserire la libreria statica quando si collega quello dinamico (ad esempio ho -lfoo per libfoo.a) e il linker non si lamenta. Tuttavia, quando il programma principale chiama dlopen() sulla libreria dinamica, la chiamata fallisce con un messaggio "simbolo non definito" che fa riferimento a un simbolo dalla libreria statica.
L'esecuzione di nm indica che il simbolo in questione non è definito nella libreria dinamica e il programma principale non lo contiene, quindi come posso forzare il linker a inserire questo simbolo? Il simbolo stesso si trova nella sezione dati non inizializzata (tipo di simbolo "B" nell'output nm).
La risposta '--whole-archive' trasformerà tutti i simboli nell'archivio in simboli esportati nella libreria condivisa. Se hai solo bisogno di un simbolo, questa risposta crea molto meno rigonfiamento nel tuo .so. – MuertoExcobito