给定以下库:
利福。{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
。 后者采用库内的任何地址。
我会说不。从技术上讲,库代码从何处加载并不重要。一旦进入记忆,所有已知的都是像被引用的符号这样的东西。一旦代码在内存中,原始库文件就不再相关。