0

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

谢谢,

4

1 回答 1

1

您可以使用dladdr(),它提供有关包含给定符号的图像的信息。AC 解决方案(我比 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()

于 2013-09-05T12:13:04.093 回答