Как получить несколько экземпляров аддонов C ++ в nodejs? - PullRequest
1 голос
/ 07 октября 2019

Я хочу использовать библиотеку C ++ в нескольких экземплярах в nodeJs. Я использую модуль привязки 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 ++ всегда используется совместно, что не соответствует ожидаемому поведению.

1 Ответ

2 голосов
/ 07 октября 2019

Я советую вам перестроить аддон C ++ таким образом, чтобы вы не получили это требование.

Вы не можете снова загрузить тот же модуль из того же процесса, если вы это сделаете,возвращает тот же дескриптор (ссылка)

Вы можете загрузить из других процессов

В Windows

Система поддерживает процесссчетчик ссылок на все загруженные модули. Вызов LoadLibrary увеличивает счетчик ссылок. Вызов функции FreeLibrary или FreeLibraryAndExitThread уменьшает счетчик ссылок. Система выгружает модуль, когда его счетчик ссылок достигает нуля или когда процесс завершается (независимо от счетчика ссылок).

https://stackoverflow.com/a/9190995/12167785

В Linux

Если та же библиотека загружается снова с помощью dlopen (), возвращается тот же дескриптор файла. Библиотека dl поддерживает количество ссылок для дескрипторов библиотеки, поэтому динамическая библиотека не освобождается до тех пор, пока dlclose () не будет вызвана для нее столько раз, сколько dlopen () преуспел в ней. Процедура _init (), если она есть, вызывается только один раз. Но последующий вызов с RTLD_NOW может принудительно разрешить символы для библиотеки, ранее загруженной с RTLD_LAZY.

https://stackoverflow.com/a/9191147/12167785

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...