举个例子,我有一个名为 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
谢谢
最佳答案
您可以使用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() 实现。
关于c++ - 如何查找已通过 dlopen API 加载的 dylib 的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634743/