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

时间:2017-05-17 14:17:24

标签: c++ linux abi dlsym

一般情景

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

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

方式A

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

方式B

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

问题

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

2 个答案:

答案 0 :(得分:2)

“方式A”的一个优点是它让您有机会将不同的指针传递给不同的插件。所以你可以做一个“v1”指针结构,然后是一个新的插件可以请求的“v2”。

答案 1 :(得分:1)

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

所以我认为方法A更好。