ホームページ >ウェブフロントエンド >jsチュートリアル >Nodejs の C モジュールを正しく使用して OpenSSL_node.js にリンクする方法

Nodejs の C モジュールを正しく使用して OpenSSL_node.js にリンクする方法

WBOY
WBOYオリジナル
2016-05-16 16:40:271283ブラウズ

原因はこれです。最近、Nodejs の C モジュールを書いて、それを JS 側で呼び出しました。ネットワーク通信は当然ながら ssl と切り離せないため、Openssl ライブラリにリンクする必要があります。

私たちの当初の予想は、ユーザーが Openssl ランタイム ライブラリをインストールする必要があり、その後、c モジュールが Openssl so ライブラリに動的にリンクされて実行されるというものでした。

最初はすべて順調に見えましたが、この openssl 関数が機能しないことがわかりました。

PKCS7_sign()
PKCS7_sign ( )
私たちが見つけたのは:

C モジュールが Openssl ライブラリに動的にリンクされている場合、コンパイルには問題ありませんが、実行時にエラーが表示されます: PKCS7_sign シンボルが見つかりません。
c モジュールが Openssl ライブラリに静的にリンクされている場合、コンパイルには問題ありませんが、実行時にはこの関数が呼び出される場所は影響を受けず、この関数の戻り値は 0 になります。ドキュメントによると、エラーが発生しますが、エラーは Openssl 関数 ERR_get_error を使用して取得されます。コードも 0 です。これは、エラー コードがないことを意味します。
これは Linux では当てはまりますが、Mac ではどうなのでしょうか? Mac で試してみたところ、Mac では問題がなかったので、Nodejs にバグを報告しました。 https://github.com/joyent/node/issues/8026][1]

同時に、Google で openssl にリンクする Nodejs に似たキーワードを検索しました。

次のような記事がいくつか見つかりました:

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 ライブラリを使用していることがわかりました。これは、最新の Openssl がすべて含まれている Nodejs のソース コードから見つけることができます。ソースコード。

上記の最初の記事を書いたハンサムな男性: https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL は Nodejs 開発者です。

基本的な結論:

Nodejs は OpenSSL 自体を使用します
Nodejs 0.6 より前では、Nodejs は Openssl ライブラリに動的にリンクされていました。
以降のバージョンは静的にリンクされました。 この時点で、Node がすでに私のバグに対応していることがわかりました: https://github.com/joyent/node/issues/8026

ノードによって説明される理由:

Node 自体がコンパイルされた後、使用されていないシンボルが削除されたため、実行時にシンボルが見つからなくなり、その結果、Node のサイズが 400k 大きくなりました。

Node さんの素早い返信に感謝します。Node さんの積極性に感心します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。