查找被调用库的路径

时间:2015-01-07 16:39:11

标签: c++ ubuntu

在使用C ++的Ubuntu中,我得到了一些代码,它创建了一个名为Alpha的可执行文件。代码需要在运行时加载文本文件,因此有一部分代码可以找到可执行文件的路径,这样就可以找到包含这些文本文件的相对目录。可执行路径由/proc/self/exe确定。

现在,我没有创建可执行的Alpha,而是想创建一个名为LibAlpha的库,其代码与Alpha相同,然后创建另一个名为Beta的可执行文件,调用LibAlpha。但是,使用Alpha的原始代码执行此操作的问题在于,当调用/proc/self/exe时,它返回Beta的路径,而不是LibAlpha的路径。如何获取被调用库的路径,而不是可执行文件?

1 个答案:

答案 0 :(得分:1)

在你的图书馆代码中:

#ifndef _GNU_SOURCE
#   define _GNU_SOURCE 1
#endif _GNU_SOURCE
#include <dlfcn.h>

#include <string>

std::string my_path() {
    Dl_info info;
    return dladdr(reinterpret_cast<void*>(&my_path), &info) 
        ? info.dli_fname 
        : std::string()
        ;
}