如何告诉一个本地的node.js扩展名在哪里可以find(正确的)libstdc ++?

我正在从npm安装scrypt ( https://www.npmjs.com/package/scrypt )。 安装涉及构build本地node.js扩展的node-gyp构build步骤。 当我然后启动我的应用程序,它失败,出现以下错误:

 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) 

这并不奇怪,因为

 [xxxx@xxxx nodeapp]$ strings /package/host/localhost/gcc-4/lib64/libstdc++.so.6 | grep "GLIBCXX_3\.4\.21" [xxxx@xxxx nodeapp]$ 

 [xxxx@xxxx nodeapp]$ strings /package/host/localhost/gcc-5/lib64/libstdc++.so.6 | grep "GLIBCXX_3\.4\.21" GLIBCXX_3.4.21 [xxxx@xxxx nodeapp]$ 

我有

 export PATH=/package/host/localhost/gcc-5/bin:$PATH export LD_LIBRARY_PATH=/package/host/localhost/gcc-5/lib64:$LD_LIBRARY_PATH 

在我的.bashrcgcc --version正确显示5.2.0 ,所以我假设这些设置是正确的。

所以问题是,我该如何告诉scrypt到正确的libstdc++.so.6的path,即/package/host/localhost/gcc-5/lib64/libstdc++.so.6 ? (为什么它甚至弄错了?)

编辑:

这是一个CentOS机器。 我使用node.js版本6.1.0 ,npm版本3.8.6 ,我试图安装scrypt版本6.0.3 ,这是写这篇文章时的最新版本。

编辑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++'], 

,这在语法上也是有效的,但是它仍然会尝试在运行时从错误的path加载库。

我遇到了类似的麻烦,并且用一个技巧解决了这个问题:使用dynamic加载的libstdc ++。so.6到LD_PRELOAD:

 LD_PRELOAD='/path/to/lib/libstdc++.so.6' /usr/bin/nodejs app.js