指向符号的指针与常规符号查找的 ABI 稳定性
ABI stability on pointers to symbols vs regular symbol lookup
一般方案
使用 dlsym((,我从我的主线程动态加载一个共享对象插件。
我遵循这两种方式中的任何一种。
方式 A
将指向符号的指针结构传递给插件,以便它可以调用主机的函数并访问其他变量,当然知道它们的数据类型。
方式B
让插件通过它们的extern "C"
标识符调用符号,并让运行时正常查找它们。
问题
这两种方法在ABI稳定性方面有什么区别吗?例如:如果插件在不同的环境中编译,这种方法之一是否会保证从插件到主机程序的更多兼容性机会?
"Way A"的一个优点是它让你有机会将不同的指针传递给不同的插件。 因此,例如,您可以创建一个指针的"v1"结构,然后创建一个新插件可以请求的"v2"。
如果有什么效果很好,除了一些性能损失之外,两种方法是等效的。但是运行时查找会解析全局范围内的命名符号,这可能会受到dlopen
中使用的RTLD_GLOBAL
等标志的影响。即使使用相同的插件,它也会导致不同的上下文下的不同行为。
所以我认为方法A更好。
相关文章:
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 符号查找错误未定义的符号:curl_mime_init
- 即使存在NM报告符号,在运行时的符号查找错误也是如此
- 指向符号的指针与常规符号查找的 ABI 稳定性
- Orocos LTTng 符号查找错误:/path/to/liborocos-rtt-traces-gnulinux.s
- caffe convert_imageset:符号查找错误
- 动态链接到 c++ 静态成员字段时符号查找失败
- 部署后的Linux qt应用程序-符号查找错误:libQt5Core.so.5未定义的符号:uncv_getDefaul
- 访问Boost Bind时,共享库中的C 符号查找错误
- LD_BIND_NOW:符号查找错误,但可执行文件仍在运行
- 如何捕捉符号查找错误
- JNI 问题:DLL 中的文件句柄出现符号查找错误C++
- 运行时出现符号查找错误
- 未定义的符号 - 符号查找错误
- libstdc++中出现奇怪的符号查找错误
- 符号查找错误(c++)
- Java JNI符号查找错误
- c++运行时符号查找错误,ubuntu
- 在运行时而不是加载时出现符号查找错误
- 符号查找错误时,使用我的Qt插件从共享库内部