使用动态/共享库,我们可以在运行时检索包含函数地址的DLL / so / dylib句柄(使用GetModuleHandleEx或dladdr)。这可以用于将一些代码与包含它的动态库相关联。 问题来自于静态库,因为每个链接操作都会延迟到最后的可执行链接操作,并且此时每个函数都会获得其解析的最终指针。然后我们不能将任何地址或函数指针关联到静态lib。
多个内联函数指针在链接时获得唯一指针(将丢弃重复项)。所以我们不能用其中一个来识别静态库。
多个静态将为每个翻译单元获取一个指针,该指针也不识别静态库。
我现在唯一的解决方案是为项目中使用的每个静态库提供一个-UUID = -DUUID =不同的UUID,但是使用内部编译时功能/技巧自动化它会很酷。
我的问题是:在windows和unix平台(linux / OSX / iOS / Android ......)上运行时唯一标识静态库的技巧是什么? (尚未测试,但对于Windows,即使我不喜欢它,“__ ImageBase”符号技巧也可以完成这项工作,但对于其他平台我已经卡住了。)
为了更准确地说明我试图实现的目标,我希望在运行时映射一些全局变量以及它们所属的相应静态库。
例如:在lib0.lib中,从这个lib0.cpp代码构建:
namespace {
AClass global0;
}
以及从lib1.cpp代码构建的lib1.lib中:
namespace {
AClass global1;
}
我希望能够在运行时以通用方式进行映射: - & global0 with“lib0.lib” - & global1 with“lib1.lib”
希望我的问题更清楚......