2015-01-14 13 views
6

Wenn meine ausführbare Datei dlopen aufruft, um eine Bibliothek zu laden, aber die Adresse dlclose nicht aufruft, bleibt die Bibliothek geladen, bis der Prozess beendet wird und das Betriebssystem ihn zum Entladen zwingt.Gibt es ein Lade-Leck, wenn dlopen() von einer DLL-Bibliothek aufgerufen wird?

Wenn ich a.so laden, die b.so lädt, dann dlclose rufen a.so, wird das OS entladen b.so auch?

Wie vergleicht dies mit einem ähnlichen Szenario mit dem Microsoft-Äquivalent LoadLibraryEx?

Antwort

3

Die Anwendung muss sich nur darum kümmern, was die App direkt lädt. Wenn Sie a.so laden, müssen Sie sich nur mit dem Entladen von a.so befassen.

Wenn a.so sich weigert, b.so zu entladen, ist das ein Problem mit a.so, Ihre App ist dafür nicht verantwortlich. Der Autor von a.so muss sich zusammensetzen und das Problem mit seiner Bibliothek beheben.

+0

Danke. Wissen Sie, wo diese Informationen in der Dokumentation zu 'dl *' zu finden sind? Ich lese http://linux.die.net/man/3/dlopen aber fand es nicht – Kietz

+0

Ich mache hauptsächlich Windows-Programmierung, nicht Linux/Unix, aber ich denke nicht, dass dies offiziell dokumentiert werden muss. Alles, was ein Modul tun kann, ist für das Laden von Bibliotheken verantwortlich zu sein. Was ist, wenn es sich bei der Bibliothek um eine Drittanbieter-Bibliothek handelt, bei der die dritte Partei 1,2,3 oder keine Module laden kann, basierend auf bestimmten Einstellungen, der Umgebung usw.? Wird Ihre Anwendung diese dritte Party-Modul und was macht es intern? Natürlich nicht. – PaulMcKenzie

+0

Das ist definitiv der Fall für 'LoadLibrary *' und 'GetModuleHandle *'? Könnten Sie mich auf die Dokumentation für diese verweisen? – Kietz