如何在运行时检索 dylib 的路径?

发布于 2024-12-06 16:30:55 字数 195 浏览 0 评论 0原文

在 OS X 上,dylib 中的代码如何在运行时找到加载它的路径?

我来自 Windows 背景,习惯于调用 GetModuleFileName(dllHandle,...)

存在 NSGetExecutablePath() ,它将为我提供当前进程的可执行文件的路径。有没有相当于给我当前 dylib 路径的东西?

On OS X, how can code in a dylib find the path it was loaded from, at runtime?

Coming from a Windows background, I'm used being able to call GetModuleFileName(dllHandle,...).

There exists NSGetExecutablePath() which will give me the path of the executable for the current process. Is there an equivalent to give me the current dylib path?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏天碎花小短裙 2024-12-13 16:30:55

使用 dladdr(3)。给定内存地址,dladdr() 输出一个结构,其中包含包含该地址的库的路径以及其他数据。例如,在您的图书馆内:

#include <stdio.h>
#include <dlfcn.h>

void test(void) {
    Dl_info info;
    if (dladdr(test, &info)) {
        printf("Loaded from path = %s\n", info.dli_fname);
    }
}

Use dladdr(3). Given a memory address, dladdr() outputs a structure that has, amongst other data, the path of the library containing the address. For example, inside your library:

#include <stdio.h>
#include <dlfcn.h>

void test(void) {
    Dl_info info;
    if (dladdr(test, &info)) {
        printf("Loaded from path = %s\n", info.dli_fname);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文