查找被调用库的路径

Finding the path of a called library

本文关键字:路径 调用 查找      更新时间:2023-10-16

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

现在,我想创建一个名为 LibAlpha 的库,而不是创建可执行的 Alpha,它

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

在您的库代码中:

#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()
        ;
}