这是设置:
A
有一个加载的应用程序liba.so
(在编译时链接)liba.so
导出符号expA
- 我既不控制
A
也不liba.so
- 应用程序 A 可以通过(想想插件架构)将我指定的库加载
libmine.so
到同一进程中dlopen
- 我需要使用
expA
fromlibmine.so
但不知道如何在没有明确链接到的情况下找到它liba.so
,这是我迄今为止一直在做的事情。我认为这在现实世界中行不通,因为不能保证该符号与我的本地副本中的地址相同liba.so
(或者是吗?)。libmine.so
将是封闭源代码,不能用A
.
我从来没有做过这样的事情,所以对库加载的细节有点不清楚。例如,如果我尝试dlopen("liba.so")
from inside libmine.so
,我会得到一个已加载库的句柄还是一个新副本?
就如何libmine.so
加载而言,我所知道的是它将被加载RTLD_LAZY
(仅此而已)。
任何帮助和指点将不胜感激!