Wie kann ich den Pfad der gemeinsam genutzten Bibliothek innerhalb der Bibliothek selbst abrufen?Bibliothekspfad, wenn dynamisch geladen?
Mit anderen Worten, nehmen wir an, dass Bibliothek X geladen wird mit dlopen()
, wie bekomme ich Zugriff auf den Pfad, der verwendet wurde, um die besagte Bibliothek aus der Bibliothek selbst zu laden?
Beachten Sie, dass ich nicht den Agenten, der die Bibliothek an erster Stelle geladen haben kann mir diesen Parameter übergeben.
AKTUALISIERT: Hier Art und Weise, die mit statischen Variablen arbeitet:
std::string wdir;
namespace {
class dynamic_library_load_unload_handler {
public:
dynamic_library_load_unload_handler(){
Dl_info dl_info;
dladdr((void *) NP_Initialize, &dl_info);
std::string path(dl_info.dli_fname);
wdir = path.substr(0, path.find_last_of('/') +1);
}
~dynamic_library_load_unload_handler(){
// Code to execute when the library is unloaded
}
} dynamic_library_load_unload_handler_hook;
}
Gibt es eine Option, um einige Umgebungsvariablen mit diesem Pfad zu setzen? Gibt es die Möglichkeit, einige tmp-Datei zu schreiben (ich weiß ... shtty Lösung :() – bua
@bua: Wenn Push kommt, werde ich wahrscheinlich auf dem Dateisystem "Trampolin" brauchen ... aber ich versuche es finden Sie einen saubereren Weg. – jldupont
Zu meiner Enttäuschung, auf Android dli_fname enthält nicht den Modul Pfad, nur Dateiname. –