有没有办法在运行时使用C ++唯一标识静态库?

时间:2016-01-29 18:03:28

标签: c++ windows visual-studio unix clang

使用动态/共享库,我们可以在运行时检索包含函数地址的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”

希望我的问题更清楚......

0 个答案:

没有答案