Я устанавливаю scrypt
(https://www.npmjs.com/package/scrypt) от npm. Установка включает этап сборки node-gyp
, который создает собственное расширение node.js. Когда я затем запустить мое приложение, она не со следующей ошибкой:Как указать собственное расширение node.js, где можно найти (справа) libstdC++?
node index.js
module.js:568
return process.dlopen(module, path._makeLong(filename));
^
Error: /package/host/localhost/gcc-4/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /home/xxxx/xxxx/node_modules/scrypt/build/Release/scrypt.node)
at Error (native)
at Object.Module._extensions..node (module.js:568:18)
at Module.load (module.js:456:32)
at tryModuleLoad (module.js:415:12)
at Function.Module._load (module.js:407:3)
at Module.require (module.js:466:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/home/xxxx/xxxx/node_modules/scrypt/index.js:3:20)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:456:32)
at tryModuleLoad (module.js:415:12)
at Function.Module._load (module.js:407:3)
at Module.require (module.js:466:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/home/xxxx/xxxx/node_modules/unfun-cms/lib/utils/password.js:3:16)
что не так удивительно, потому что
[[email protected] nodeapp]$ strings /package/host/localhost/gcc-4/lib64/libstdc++.so.6 | grep "GLIBCXX_3\.4\.21"
[[email protected] nodeapp]$
в то время как
[[email protected] nodeapp]$ strings /package/host/localhost/gcc-5/lib64/libstdc++.so.6 | grep "GLIBCXX_3\.4\.21"
GLIBCXX_3.4.21
[[email protected] nodeapp]$
У меня есть
export PATH=/package/host/localhost/gcc-5/bin:$PATH
export LD_LIBRARY_PATH=/package/host/localhost/gcc-5/lib64:$LD_LIBRARY_PATH
в моем .bashrc
и gcc --version
показаны 5.2.0
правильно, поэтому я предполагаю, что эти настройки в порядке.
Итак, вопрос в том, как сообщить scrypt
путь к правильному libstdc++.so.6
, а именно тот, который находится на /package/host/localhost/gcc-5/lib64/libstdc++.so.6
? (И почему даже это неправильно?)
EDIT:
Это машина CentOS. Я использую версию node.js 6.1.0
, версию npm 3.8.6
, и я пытаюсь установить версию scrypt
6.0.3
, которая является последней версией на момент написания этой статьи.
EDIT 2:
Я пытался статически связать библиотеку путем редактирования node_modules/scrypt/binding.gyp
, добавив
'libraries': ['/package/host/localhost/gcc-5/lib64/libstdc++.so.6'],
к каждому из четырех указанных целей, а затем запустить node-gyp rebuild
.
Я также попытался изменить это
'libraries': ['-L/package/host/localhost/gcc-5/lib64', '-lstdc++'],
, которая, как представляется синтаксический правильными, слишком, но все же, он пытается загрузить библиотеку из ложного пути во время выполнения.