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

标签 c++ linux shared-libraries

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

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

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

谢谢

西蒙

最佳答案

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

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

如果需要处理父进程和子进程之间的通信,有几个 Inter-process Communication可用的方法,例如 pipes .

关于c++ - 如何独立多次加载共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21328162/

相关文章:

linux - 使用链接器标志复制 dlopen 的 RTLD_DEEPBIND 行为

c++ - 制作索引序列元组

c++ - 如何声明指向另一个数组元素的指针数组

java - 在 Android 上使用 jNAOqi

c - PEM_read_RSA_PUBKEY 错误 "Expecting: PUBLIC KEY"

linux - 为什么 glibc 和 pthread 库都定义了相同的 API?

crash - 相同的代码在共享库中无法(某种程度上)工作,但在程序中直接使用时可以工作

c++ - 移植 OpenGL 矩阵运算以 boost QVM

c++ - 如何在 WinCE 设备上获取供应商和产品 ID

python - socket.gethostbyaddr() 在某些计算机上返回错误,而在其他计算机上不返回错误