鉴于以下库:
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}}句柄。)
答案 0 :(得分:1)
在Windows上,您可以使用GetModuleFilename
或更简单的GetMappedFileName
。后者占用库中的任何地址。
答案 1 :(得分:-1)
我会说不。从技术上讲,从哪里加载库代码并不重要。一旦进入内存,所有已知的东西就像被引用的符号。一旦代码在内存中,原始库文件就不再相关了。