html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

如何正确使用Nodejs 的 c++ module 链接到 OpenSSL_node.js_

[ ] 已经帮助:人解决问题

事情的起因是这样的, 因为某些原因, 最近在写 Nodejs 的 c++ module, 然后在js这边调用。  网络通信自然离不开ssl, 于是需要链接到Openssl的库。59aHTML5中文学习网 - HTML5先行者学习网

我们本来的期望是,需要用户安装有Openssl的运行库, 然后我们的c++ module 动态链接到Openssl的so库上来运行。59aHTML5中文学习网 - HTML5先行者学习网

起初一切看起来还不错,直到我们发现这个openssl的函数不能工作:59aHTML5中文学习网 - HTML5先行者学习网

PKCS7_sign()59aHTML5中文学习网 - HTML5先行者学习网
PKCS7_sign ( )59aHTML5中文学习网 - HTML5先行者学习网
我们发现:59aHTML5中文学习网 - HTML5先行者学习网

如果我们的 c++ 模块与Openssl库动态链接的话, 编译都没问题. 但是运行会出现: PKCS7_sign 符号无法找到的错误.59aHTML5中文学习网 - HTML5先行者学习网
如果我们的 c++ 模块与Openssl库静态链接的话, 编译也没问题, 但是运行时,调用这个函数的地方没有效果, 这个函数返回值是 0. 按照文档表示出现错误, 但是用 Openssl的函数 ERR_get_error 获取错误码也是0. 表示没有错误码.59aHTML5中文学习网 - HTML5先行者学习网
在linux上是这样, 那在Mac上呢? 用Mac试了一下, 发现Mac没有问题. 于是,想到这可能是Nodejs的一个bug. 然后就去 Nodejs 给它报了一个bug: [https://github.com/joyent/node/issues/8026][1]59aHTML5中文学习网 - HTML5先行者学习网

同时, google上搜索了 nodejs linking to openssl 类似的关键字.59aHTML5中文学习网 - HTML5先行者学习网

找到这样几篇文章:59aHTML5中文学习网 - HTML5先行者学习网

https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL59aHTML5中文学习网 - HTML5先行者学习网

https://github.com/joyent/node/issues/391559aHTML5中文学习网 - HTML5先行者学习网

http://serverfault.com/questions/338092/how-can-i-build-node-js-using-static-libssl-and-crypto-libraries59aHTML5中文学习网 - HTML5先行者学习网

https://github.com/robhawkes/node-extension/issues/159aHTML5中文学习网 - HTML5先行者学习网

通过搜索, 我们发现, 原来Nodejs自己也使用了Openssl 库, 推测nodejs自己的crypto模块也是使用Openssl lib实现的. 这点从Nodejs的源码中就能发现, 它包含了最新的Openssl的全部源码.59aHTML5中文学习网 - HTML5先行者学习网

其中写上面第一篇文章: https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL 的那个帅哥是Nodejs的开发人员.59aHTML5中文学习网 - HTML5先行者学习网

基本结论:59aHTML5中文学习网 - HTML5先行者学习网

Nodejs 自己使用了Openssl59aHTML5中文学习网 - HTML5先行者学习网
在Nodejs 0.6之前, Nodejs是动态链接到 Openssl 库的. 而之后的版本都是静态链接的.59aHTML5中文学习网 - HTML5先行者学习网
这时发现 Node 那边已经回复我的bug了: https://github.com/joyent/node/issues/802659aHTML5中文学习网 - HTML5先行者学习网

Node 解释的原因:59aHTML5中文学习网 - HTML5先行者学习网

Node 自己编译之后, 把自己没用到的符号清除, 所以我们在运行时就找不到符号了. 于是他们把这bug 修掉了. 保留了全部符号. 这导致 Node 的体积大了 400k.59aHTML5中文学习网 - HTML5先行者学习网

感谢Node的快速回复, 不得不佩服Node的活跃程度. 赞.59aHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助