gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:48:19 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com