2016-05-23 4 views
1

npmからscrypthttps://www.npmjs.com/package/scrypt)をインストールしています。インストールには、node-gypビルドステップが含まれ、ネイティブなnode.js拡張が構築されます。ネイティブのnode.js拡張機能に、(右側の)libstdC++をどこに見つけるかを教えてください。

[[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 
を持っているので、

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) 

それほど驚くべきことではない:私はその後、私のアプリを起動すると、次のエラーで失敗します

in私の.bashrcgcc --versionは正しく5.2.0と表示されていますので、これらの設定は問題ないと思います。

質問は、どうすればlibstdc++.so.6の正しいパス、つまり/package/host/localhost/gcc-5/lib64/libstdc++.so.6のパスをscryptに伝えますか? (そして、なぜそれも、それが誤解しない?)

EDIT:

これは、CentOSのマシンです。私はnode.jsバージョン6.1.0、npmバージョン3.8.6を使用していますが、scryptバージョン6.0.3をインストールしようとしています。これはこの執筆時点での最新バージョンです。

EDIT 2:

私は静的に、node_modules/scrypt/binding.gypを編集する4つの指定されたターゲットのそれぞれに

'libraries': ['/package/host/localhost/gcc-5/lib64/libstdc++.so.6'], 

を追加し、その後node-gyp rebuildを実行してライブラリをリンクしてみました。

は、私は、あまりにも、まだ、それは実行時に間違ったパスからライブラリをロードしようとすると、構文的に有効であると思わ

'libraries': ['-L/package/host/localhost/gcc-5/lib64', '-lstdc++'], 

、これを変更してみました。

答えて

1

私は同様のトラブルでstubledとトリックはのlibstdC++の動的な負荷を使用すると、それを解決していたLD_PRELOADてso.6:。

LD_PRELOAD='/path/to/lib/libstdc++.so.6' /usr/bin/nodejs app.js 
関連する問題