2016-05-23 115 views
1

我正在从npm安装scrypthttps://www.npmjs.com/package/scrypt)。安装涉及构建本地node.js扩展的node-gyp构建步骤。当我再开始我的应用程序时,出现以下错误:如何告诉本地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 

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

所以问题是,我该如何告诉scrypt正确的libstdc++.so.6的路径,即/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++'], 

,这似乎是语法上有效的,太但尽管如此,它试图在运行时错误的路径加载库。

回答

1

我stubled了类似的麻烦,并有一招解决它通过LD_PRELOAD使用的libstdc so.6 ++的动态负载:

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