13

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

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

存在NSGetExecutablePath()它将为我提供当前进程的可执行文件的路径。有没有等价物给我当前的dylib路径?

4

1 回答 1

15

使用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);
    }
}
于 2011-09-29T16:10:25.013 回答