如何找到已通过dlopen API加载的dylib的路径

时间:2013-09-05 11:09:00

标签: c++ c macos

让我举个例子,我有一个名为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

感谢,

1 个答案:

答案 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()