如何独立多次加载共享对象

Posted

技术标签:

【中文标题】如何独立多次加载共享对象【英文标题】:How to load a shared object multiple times independently 【发布时间】:2014-01-24 08:48:27 【问题描述】:

我的任务是设计一个小型守护程序(在 Debian Linux 上),它将使用黑盒 libfoo.so 与外部 EFT 终端进行通信。有几个相同的 EFT 终端(大约 100 个),一个 libfoo.so 实例只能与一个终端通信。有一个 init 调用实质上将实例绑定到终端。

我们公司主要使用 Java,但这可能需要 C++ 实现。编程语言尚未定义。

由于我们需要处理与多个终端的并发通信(大约 10 个并发线程),我们需要加载 libfoo.so 的多个实例。我正在寻找如何解决这种要求的设计原则(dlopen 只会加载一次 SO,JNI 也是如此)。我需要产生子进程吗?复制/粘贴 SO 并将其命名为 libfoo_1.so、libfoo_2.so 等(唉!)还有其他解决方案吗?

谢谢

西蒙

【问题讨论】:

当您说“黑盒”时,您的意思是共享对象没有任何 API 吗? 很抱歉在使用“黑盒”时不精确。 SO 确实有 API,但是我们没有源代码,无法影响 API。 【参考方案1】:

如果库没有 API,这意味着它使用 .init mechanism 运行其代码,那么您没有比 fork 父进程并在子进程中 dlopen 库更好的选择。

这其实很简单,只要你记得wait 让你的子进程在需要时终止。

如果您需要处理父进程和子进程之间的通信,可以使用多种Inter-process Communication 方法,例如pipes。

【讨论】:

感谢您确认子进程是可行的方法。

以上是关于如何独立多次加载共享对象的主要内容,如果未能解决你的问题,请参考以下文章

DFS分布式独立共享和域共享如何设置访问权限

如何将绘图仪表板应用程序导出到 html 独立文件以与其他人共享?

两个独立的应用程序,两个数据库,一个 IOC。如何共享会员资格?

数据库原理及应用(学习笔记)

数据库原理与技术学习笔记

静态变量和成员变量有什么区别?应该怎么调用?