使用dlsym(),我从主线程动态加载共享对象插件。
我遵循这两种方式中的任何一种。
将一个指针结构传递给插件,以便它可以调用主机的函数并访问其他变量,当然知道它们的数据类型。
让插件按其extern "C"
标识符调用符号,并让运行时正常查找它们。
这两种ABI稳定性方法有什么区别吗?例如:如果在不同的环境中编译它们,这种方法中的一种是否可以保证从插件到主机程序的兼容性更高?
答案 0 :(得分:2)
“方式A”的一个优点是它让您有机会将不同的指针传递给不同的插件。所以你可以做一个“v1”指针结构,然后是一个新的插件可以请求的“v2”。
答案 1 :(得分:1)
如果一切正常,除了一些性能损失外,两种方法是等效的。但运行时查找会解析全局范围内的命名符号,这可能会受到RTLD_GLOBAL
中使用的dlopen
等标记的影响。即使使用相同的插件,它也会在不同的上下文中导致不同的行为。
所以我认为方法A更好。