国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

如何正確使用Nodejs 的 c++ module 鏈接到 OpenSSL

2024-05-06 16:07:26
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了如何正確使用Nodejs 的 c++ module 鏈接到 OpenSSL,需要的朋友可以參考下
 
 

事情的起因是這樣的, 因為某些原因, 最近在寫 Nodejs 的 c++ module, 然后在js這邊調用。  網絡通信自然離不開ssl, 于是需要鏈接到Openssl的庫。

我們本來的期望是,需要用戶安裝有Openssl的運行庫, 然后我們的c++ module 動態鏈接到Openssl的so庫上來運行。

起初一切看起來還不錯,直到我們發現這個openssl的函數不能工作:

PKCS7_sign()
PKCS7_sign ( )
我們發現:

如果我們的 c++ 模塊與Openssl庫動態鏈接的話, 編譯都沒問題. 但是運行會出現: PKCS7_sign 符號無法找到的錯誤.
如果我們的 c++ 模塊與Openssl庫靜態鏈接的話, 編譯也沒問題, 但是運行時,調用這個函數的地方沒有效果, 這個函數返回值是 0. 按照文檔表示出現錯誤, 但是用 Openssl的函數 ERR_get_error 獲取錯誤碼也是0. 表示沒有錯誤碼.
在linux上是這樣, 那在Mac上呢? 用Mac試了一下, 發現Mac沒有問題. 于是,想到這可能是Nodejs的一個bug. 然后就去 Nodejs 給它報了一個bug: [https://github.com/joyent/node/issues/8026][1]

同時, google上搜索了 nodejs linking to openssl 類似的關鍵字.

找到這樣幾篇文章:

https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL

https://github.com/joyent/node/issues/3915

http://serverfault.com/questions/338092/how-can-i-build-node-js-using-static-libssl-and-crypto-libraries

https://github.com/robhawkes/node-extension/issues/1

通過搜索, 我們發現, 原來Nodejs自己也使用了Openssl 庫, 推測nodejs自己的crypto模塊也是使用Openssl lib實現的. 這點從Nodejs的源碼中就能發現, 它包含了最新的Openssl的全部源碼.

其中寫上面第一篇文章: https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL 的那個帥哥是Nodejs的開發人員.

基本結論:

Nodejs 自己使用了Openssl
在Nodejs 0.6之前, Nodejs是動態鏈接到 Openssl 庫的. 而之后的版本都是靜態鏈接的.
這時發現 Node 那邊已經回復我的bug了: https://github.com/joyent/node/issues/8026

Node 解釋的原因:

Node 自己編譯之后, 把自己沒用到的符號清除, 所以我們在運行時就找不到符號了. 于是他們把這bug 修掉了. 保留了全部符號. 這導致 Node 的體積大了 400k.

感謝Node的快速回復, 不得不佩服Node的活躍程度. 贊.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 陇南市| 巴马| 拜泉县| 澄江县| 新竹市| 扶绥县| 枣强县| 阳曲县| 颍上县| 夏河县| 鸡西市| 句容市| 内乡县| 东安县| 夏津县| 资源县| 荆州市| 安阳市| 淳安县| 铅山县| 姜堰市| 汕头市| 澎湖县| 辽阳县| 元阳县| 永吉县| 岳西县| 樟树市| 简阳市| 上思县| 岳阳市| 渝中区| 海晏县| 新龙县| 巢湖市| 金溪县| 双牌县| 天峨县| 南郑县| 大城县| 朝阳区|