让我举个例子,我有一个名为libtest.dylib的dylib,我通过dlopen(/usr/local/path/libtest.dylib,RTLD_NOW | RTLD_GLOBAL)加载一个单独的进程。
现在在libtest.dylib中,我有一个名为std :: string find_loaded_dylib_path()的方法,该方法应该返回已经加载的dylib的路径。
有人可以帮我解决这个问题吗?如果您有任何可以提供帮助的示例程序
平台:Mac OSX 语言:C ++,C
感谢,
答案 0 :(得分:0)
您可以使用dladdr()
,它提供有关包含给定符号的图像的信息。
C解决方案(我比C ++更熟悉)可能如下所示:
#include <dlfcn.h>
char *my_dylib_path(void)
{
Dl_info info;
if (dladdr(my_dylib_path, &info) != 0) {
return strdup(info.dli_fname);
} else {
// this should not happen :-)
return NULL;
}
}
这个想法是“my_dylib_path”是动态库本身的一个符号。
我已经使用“普通”共享库对其进行了测试,但它应该与加载的动态库一起使用
也可以通过dlopen()
。