我需要从没有很多常用工具(例如,没有 ldd、没有 gdb 等)的嵌入式平台上的自定义库中加载函数。我正在交叉编译到那个平台。
假设我想foo
使用libx.so
. 现在该平台已libx.so
包含在系统库目录中,但我希望我的程序从另一个位置获取它。我已经相应地设置了 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。
我可以尝试其他任何方法吗?
谢谢。