2015-01-14 10 views
6

Se il mio file eseguibile chiama dlopen per caricare una libreria ma trascura di chiamare dlclose, la libreria rimarrà caricata fino alla chiusura del processo e il sistema operativo lo costringe a scaricare.C'è una perdita di carico se dlopen() viene chiamato da una libreria dlopen?

Se carico a.so che carica b.so, quindi chiamare dlclose su a.so, non il sistema operativo scaricare b.so come bene?

In che modo si confronta con uno scenario simile utilizzando l'equivalente Microsoft, LoadLibraryEx?

risposta

3

L'applicazione deve solo preoccuparsi di ciò che l'app carica direttamente. Se carichi, tutto ciò di cui hai bisogno è scaricare a.so.

Sesi rifiuta di scaricare b.so, questo è un problema con a.so, l'app non è responsabile per questo. L'autore di a.so ha bisogno di agire insieme e risolvere il problema con la sua libreria.

+0

Grazie. Sai dove trovare questa informazione nella documentazione di 'dl *'? Ho letto http://linux.die.net/man/3/dlopen ma non l'ho trovato – Kietz

+0

Per lo più faccio programmazione Windows, non Linux/Unix, ma non penso che questo debba essere documentato ufficialmente. Tutto ciò che un modulo può fare è essere responsabile per sé stesso delle librerie di caricamento. Che cosa succede se la libreria è di terze parti, dove la terza parte può caricare 1,2,3, o nessun modulo, in base ad alcune impostazioni, ambiente in esecuzione, ecc. La tua applicazione terrà traccia di questa terza modulo party e cosa fa internamente? Ovviamente no. – PaulMcKenzie

+0

Quindi questo è sicuramente il caso di "LoadLibrary *" e "GetModuleHandle *"? Potresti indicarmi la documentazione per quelli? – Kietz

Problemi correlati