最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何在nodejs中获得多个C ++插件实例?

IT培训 admin 8浏览 0评论

如何在nodejs中获得多个C ++插件实例?

我想在nodeJs的多个实例中使用C ++库。我正在使用绑定npm模块来包装C ++代码。但最后,C ++库成为共享对象。请为此提供帮助

我已将require('bindings')('library_name')与新关键字一起使用

我在要求下一个实例之前已经清除了要求缓存我使用过npm模块,可以清除缓存]

for (var i = 0; i < config.data.length; i++) {
        libraryObj[data[i]] = new require('library-name'); // c++ library wrapper
}

无论我做什么,C ++库都会始终共享,这不是预期的行为。

回答如下:

我建议您以不满足此要求的方式重新构造C ++插件。

您无法通过相同的过程再次加载相同的模块,如果这样做,它将返回相同的句柄(引用)

您可以从其他进程加载

在Windows上>

系统维护所有已加载的每个进程的引用计数模块。调用LoadLibrary会增加引用计数。呼唤FreeLibrary或FreeLibraryAndExitThread函数减少参考计数。当其引用计数时,系统将卸载模块达到零或进程终止时(无论参考计数)。

https://stackoverflow/a/9190995/12167785

在Linux上

如果再次使用dlopen()加载相同的库,则相同的文件返回句柄。 dl库维护以下项目的参考计数:库句柄,因此动态库直到与dlopen()一样,已多次调用dlclose()成功了。 _init()例程(如果存在)仅被调用一次。但是随后使用RTLD_NOW进行的调用可能会强制为早期加载了RTLD_LAZY的库。

https://stackoverflow/a/9191147/12167785

如何在nodejs中获得多个C ++插件实例?

我想在nodeJs的多个实例中使用C ++库。我正在使用绑定npm模块来包装C ++代码。但最后,C ++库成为共享对象。请为此提供帮助

我已将require('bindings')('library_name')与新关键字一起使用

我在要求下一个实例之前已经清除了要求缓存我使用过npm模块,可以清除缓存]

for (var i = 0; i < config.data.length; i++) {
        libraryObj[data[i]] = new require('library-name'); // c++ library wrapper
}

无论我做什么,C ++库都会始终共享,这不是预期的行为。

回答如下:

我建议您以不满足此要求的方式重新构造C ++插件。

您无法通过相同的过程再次加载相同的模块,如果这样做,它将返回相同的句柄(引用)

您可以从其他进程加载

在Windows上>

系统维护所有已加载的每个进程的引用计数模块。调用LoadLibrary会增加引用计数。呼唤FreeLibrary或FreeLibraryAndExitThread函数减少参考计数。当其引用计数时,系统将卸载模块达到零或进程终止时(无论参考计数)。

https://stackoverflow/a/9190995/12167785

在Linux上

如果再次使用dlopen()加载相同的库,则相同的文件返回句柄。 dl库维护以下项目的参考计数:库句柄,因此动态库直到与dlopen()一样,已多次调用dlclose()成功了。 _init()例程(如果存在)仅被调用一次。但是随后使用RTLD_NOW进行的调用可能会强制为早期加载了RTLD_LAZY的库。

https://stackoverflow/a/9191147/12167785

发布评论

评论列表 (0)

  1. 暂无评论