如何隔离只允许创建为singleton的行为不好的第三方c-lib
How to isolate bad behaving 3rd-party c-lib which only allows to be created as singleton?
目前我正在开发一个native-C nodejs Addon来包装一个第三方闭源代码C-lib并将其公开给nodejs。
到目前为止还不错。我的解决方案可以工作,并且可以调用和使用本机代码。
当随后调用这些函数时,会出现一个问题。第三方库似乎总是为其运行时对象分配相同的struct
(?;说:内存中的相同位置)。
我能以某种方式"沙盒"这个第三方库吗?有解决这个问题的模式吗?可能特定于nodejs插件的开发,因为nodejs是单线程、单进程的应用程序。
在这种情况下,一般的建议似乎是在一个单独的过程中运行第三方库,比如这里所说的:在进程中隔离和多次实例化C库
我不太确定如何将这种模式适应nodejs,除了将自己的nodejs进程创建为"工作者"并通过rpc与之通信之外。但这对我来说似乎有点尴尬,我不想重新发明轮子。
IMHO仅为此生成不同的节点进程似乎是"最丑陋"的解决方案。但如果我错了,请纠正我。
长话短说。感谢adivce。
这是一个非常非常困难的问题,我找到的唯一解决方案是在一个临时目录(使用不同的名称)中创建共享对象的许多副本,您的程序在其中加载每个副本一次。大多数链接器不会意识到它们是相同的,并允许您将它们加载到不同的地址空间。然而,这确实依赖于代码与位置无关的AFAIK,因此可能不起作用。它也几乎和使用IPC一样丑陋,所以它取决于你该怎么做。
相关文章:
- C++ Singleton - Prevent ::instance() to variable
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- JSON转换为nlohmann JSON-lib中的结构数组
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 使用 VS2015 在 Windows 10 上构建 Fortran .lib x64 位并将其链接到 C++
- 为什么我的链接器在找到Coin4d.lib后搜索Coin4sd.lib?
- libcpmtd.lib有什么用?
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 解析引用 |exe/dll vs lib
- 在 /usr/local/lib 下找不到库
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- VS2015 未链接用户32.lib
- 从 .lib 文件创建一个.dll文件
- 看不到文件'SDL2.lib'
- 如何使用用户定义的函数覆盖 C lib 函数,如 _sbrk?
- 如何在不需要LIBCD.lib的情况下在Visual Studio 6中编译C项目
- 可执行文件C++包括.obj,.lib和.dll吗?
- 我应该安装 .cmake 文件来共享/cmake 还是 lib/cmake?
- 如何隔离只允许创建为singleton的行为不好的第三方c-lib