c++ - 如何查找已通过 dlopen API 加载的 dylib 的路径

标签 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

谢谢

最佳答案

您可以使用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/

相关文章:

c - 我在用 C 语言求解数独的递归回溯算法时遇到问题

cocoa - 验证 NSOpenPanel 附件 View 中的输入

java - 如何在 MacOS 上修复带有分隔符的 JComboBox PopUp 的垂直位置?

c++ - 多维数组实现

c++ - 如何从 HWND 获取 Window Class Name 和 Id?

c - C 中的函数语法

c - 我如何在c中使用动态二维数组

objective-c - Finder Sync Extensions 是否需要配置文件?

c++ - 仅用于基本 POD 的模板特化

c++ - GCC -Wconversion 与否定一起发出警告,但不会发出其他警告