在使用C ++的Ubuntu中,我得到了一些代码,它创建了一个名为Alpha的可执行文件。代码需要在运行时加载文本文件,因此有一部分代码可以找到可执行文件的路径,这样就可以找到包含这些文本文件的相对目录。可执行路径由/proc/self/exe
确定。
现在,我没有创建可执行的Alpha,而是想创建一个名为LibAlpha的库,其代码与Alpha相同,然后创建另一个名为Beta的可执行文件,调用LibAlpha。但是,使用Alpha的原始代码执行此操作的问题在于,当调用/proc/self/exe
时,它返回Beta的路径,而不是LibAlpha的路径。如何获取被调用库的路径,而不是可执行文件?
答案 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()
;
}