从内部获取共享对象的运行时路径

时间:2017-05-14 12:14:27

标签: c linux windows macos shared-libraries

鉴于以下库:

libfoo。{so,dll,dylib}:

const char* get_lib_path() {
    return ...;
}

构建为共享库(例如使用GCC):

gcc -shared -fPIC foo.cpp -o libfoo.so

有没有办法让get_lib_path()在运行时返回库驻留在文件系统上的路径,无论是在Windows,macOS,Linux上?

图书馆的最终名称未知:我不能假设搜索字符串" libfoo.so"从已加载的库列表中。

这不能要求动态加载对象的本机句柄:我想知道我的库中的路径,而且我无法控制加载它的应用程序(所以我无法获取{例如{1}}句柄。)

2 个答案:

答案 0 :(得分:1)

在Windows上,您可以使用GetModuleFilename或更简单的GetMappedFileName。后者占用库中的任何地址。

答案 1 :(得分:-1)

我会说不。从技术上讲,从哪里加载库代码并不重要。一旦进入内存,所有已知的东西就像被引用的符号。一旦代码在内存中,原始库文件就不再相关了。