Мне нужно загрузить функции из пользовательской библиотеки на встроенной платформе, которая не имеет много обычных инструментов (например, без ldd, без gdb и т. Д.). Я кросс-компилирую для этой платформы.
Предположим, я хочу использовать функцию foo
из libx.so
. Теперь на платформе есть libx.so
, включенный в системный каталог libs, но я хочу, чтобы моя программа забрала его из другого места. Я соответственно установил LD_LIBRARY_PATH, но я сильно подозреваю, что моя программа все еще подхватывает системную.
Я попробовал следующее:
Dl_info dl_info;
dladdr((void*)foo, &dl_info);
fprintf(stdout, "module %s loaded\n", dl_info.dli_fname);
Но это возвращает a.out
, чтоне полезно
Я также попробовал:
Dl_info dl_info;
link_map* lm;
int code = dladdr1((void*)foo, &dl_info, (void**)(&lm), RTLD_DL_LINKMAP);
if (code == 0)
{
std::cout << "Failed" << std::endl;
return 0;
}
fprintf(stdout, "module %s loaded\n", lm->l_name);
И я получил пустую строку. Обратите внимание, код возврата был , а не 0.
Любые другие методы, которые я могу попробовать?
Спасибо.