Comment puis-je obtenir le chemin de la bibliothèque partagée à partir de la bibliothèque elle-même? En d'autres termes, disons que la bibliothèque X est chargée en utilisant dlopen()
, comment puis-je avoir accès au chemin qui a été utilisé pour charger la bibliothèque à partir de la bibliothèque elle-même?Chemin de la bibliothèque lors du chargement dynamique?
Notez que je ne peux pas avoir l'agent qui a chargé la bibliothèque en premier lieu ce paramètre.
MISE À JOUR: Voici manière qui fonctionne avec des variables statiques:
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;
}
Existe-t-il une option pour définir une variable d'environnement avec ce chemin? Y at-il possibilité d'écrire un fichier tmp (je sais ... solution shtty :() – bua
@bua: si la poussée vient à pousser, je vais probablement besoin de "trampoline" sur le système de fichiers ... mais j'essaie de – jldupont
À ma grande déception, sur Android dli_fname ne contient pas le chemin du module, seul le nom du fichier –