如何隔离只允许创建为singleton的行为不好的第三方c-lib

How to isolate bad behaving 3rd-party c-lib which only allows to be created as singleton?

本文关键字:singleton c-lib 第三方 隔离 何隔离 许创建 创建      更新时间:2023-10-16

目前我正在开发一个native-C nodejs Addon来包装一个第三方闭源代码C-lib并将其公开给nodejs。

到目前为止还不错。我的解决方案可以工作,并且可以调用和使用本机代码。

当随后调用这些函数时,会出现一个问题。第三方库似乎总是为其运行时对象分配相同的struct(?;说:内存中的相同位置)。

我能以某种方式"沙盒"这个第三方库吗?有解决这个问题的模式吗?可能特定于nodejs插件的开发,因为nodejs是单线程、单进程的应用程序。

在这种情况下,一般的建议似乎是在一个单独的过程中运行第三方库,比如这里所说的:在进程中隔离和多次实例化C库

我不太确定如何将这种模式适应nodejs,除了将自己的nodejs进程创建为"工作者"并通过rpc与之通信之外。但这对我来说似乎有点尴尬,我不想重新发明轮子。

IMHO仅为此生成不同的节点进程似乎是"最丑陋"的解决方案。但如果我错了,请纠正我。

长话短说。感谢adivce。

这是一个非常非常困难的问题,我找到的唯一解决方案是在一个临时目录(使用不同的名称)中创建共享对象的许多副本,您的程序在其中加载每个副本一次。大多数链接器不会意识到它们是相同的,并允许您将它们加载到不同的地址空间。然而,这确实依赖于代码与位置无关的AFAIK,因此可能不起作用。它也几乎和使用IPC一样丑陋,所以它取决于你该怎么做。