指向符号的指针与常规符号查找的 ABI 稳定性

ABI stability on pointers to symbols vs regular symbol lookup

本文关键字:符号 查找 ABI 稳定性 常规 指针      更新时间:2023-10-16

一般方案

使用 dlsym((,我从我的主线程动态加载一个共享对象插件。

我遵循这两种方式中的任何一种。

方式 A

将指向符号的指针结构传递给插件,以便它可以调用主机的函数并访问其他变量,当然知道它们的数据类型。

方式B

让插件通过它们的extern "C"标识符调用符号,并让运行时正常查找它们。

问题

这两种方法在ABI稳定性方面有什么区别吗?例如:如果插件在不同的环境中编译,这种方法之一是否会保证从插件到主机程序的更多兼容性机会?

"Way A"的一个优点是它让你有机会将不同的指针传递给不同的插件。 因此,例如,您可以创建一个指针的"v1"结构,然后创建一个新插件可以请求的"v2"。

如果有什么效果很好,除了一些性能损失之外,两种方法是等效的。但是运行时查找会解析全局范围内的命名符号,这可能会受到dlopen中使用的RTLD_GLOBAL等标志的影响。即使使用相同的插件,它也会导致不同的上下文下的不同行为。

所以我认为方法A更好。