2016-05-23 122 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 
相關問題