共享对象可以访问加载它的应用程序的内存吗?

问题描述 投票:0回答:1

我是共享库 (Qt5/C++/Linux) 的新手。我设法创建了一个可以加载许多 .so 文件之一的应用程序(每个动物一个:dog.so、cat.so、mouse.so)。到目前为止效果很好。

我假设共享库中的方法可以调用应用程序中的方法(例如:dog.so 可以调用 app::soundPlayerInstance() 获取指向应用程序中 SoundPlayer 单例的指针)。

虽然我的代码编译得很好,但当我运行代码时,我得到的 SoundPlayer 实例似乎是一个新实例。 (创建了另一个单身人士)。

我怀疑我对 .so 可以做什么感到困惑。 .so 能否进入加载它的应用程序、调用方法、访问全局变量等?

如果不是,如果应用程序将对象地址传递给 .so 构造函数,那么可以吗?或者有更好的方法吗?或者共享对象真的只是一种单向(应用程序调用)概念吗?

linux shared-libraries
1个回答
0
投票

是的,如果它知道这些对象的地址。共享库未链接到应用程序。应用程序链接到库,因此它知道如何定位函数。然而,将回调函数或对象从应用程序传递到库是很常见的。这样库就有了地址,所以它可以调用应用程序中的函数。

© www.soinside.com 2019 - 2024. All rights reserved.