Ho caricato una libreria condivisa utilizzando dlopen
(con le bandiere RTLD_NOW | RTLD_GLOBAL
). Se questa libreria utilizza le funzioni dal programma principale, quindi non scarica. Quindi finisco con lo stesso codice per questa lib condivisa, anche se ho scaricato (usando dlclose
), modificato, compilato, (ri) caricato.C++: dlclose non scarica la libreria condivisa
Il mio obiettivo è in realtà di ricaricare la stessa libreria dopo aver apportato delle modifiche, in modo da non dover riavviare l'intero programma per testare il mio codice.
Sto usando g ++ 4.2.3, su Linux Ubuntu 10.04.
(edit)
risolto:
"libreria caricata utilizza un simbolo a causa della RTLD_GLOBAL". In effetti, avevo dei simboli di un altro .a incorporato durante il collegamento che probabilmente venivano richiamati e impedivano alla mia libreria di chiudere ... Penso che sia possibile verificare che una lib scaricata usando dlopen (..., RTLD_NOLOAD) per controllare il la libreria è stata scaricata correttamente.
Stai rilasciando l'handle per la tua DLL? – Felipe
Probabilmente devi essere un po 'più specifico su quale piattaforma (Linux?) E quale versione stai usando. È probabile che sia importante per questo tipo di problema. –
@Komyg: sto usando dlclose (handle), quindi presumo che l'handle venga rilasciato facendo così ... – Ben