Как я могу получить путь к общей библиотеке из самой библиотеки?путь библиотеки при динамической загрузке?
Другими словами, библиотека X загружается с использованием dlopen()
, как я могу получить доступ к пути, который использовался для загрузки указанной библиотеки из самой библиотеки?
Обратите внимание, что я не могу иметь агента, который загрузил библиотеку, в первую очередь, передав мне этот параметр.
ОБНОВЛЕНО: Вот способ, который работает со статическими переменными:
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;
}
Есть ли возможность установить некоторую переменную среды с этим путем? Есть ли возможность написать некоторый файл tmp (я знаю ... shtty solution :() – bua
@bua: если push наступает, я, вероятно, должен «батут» в файловой системе ... но я пытаюсь найти чистый способ. – jldupont
К моему разочарованию, на Android dli_fname не содержится путь к модулю, только имя файла. –