C语言 从自身内部获取共享对象的运行时路径



给定以下库:

利福。{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"。

这必须不需要动态加载对象的本机句柄:我想知道库内部的路径,并且无法控制加载它的应用程序(例如,我无法获取dlopen句柄(。

在Windows上,您可以使用GetModuleFilename甚至更简单的GetMappedFileName。 后者采用库内的任何地址。

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

最新更新