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

sno*_*h09 8 c c++ macos dylib

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

来自Windows背景,我习惯了能够打电话GetModuleFileName(dllHandle,...).

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

小智 11

使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)