在OS X上,dylib中的代码如何在运行时找到它所加载的路径?
来自Windows背景,我可以拨打GetModuleFileName(dllHandle,...)
。
存在NSGetExecutablePath()
,它将为我提供当前进程的可执行文件的路径。是否有相当于给我当前的dylib路径?
答案 0 :(得分: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);
}
}