LinuxバージョンのNode.jsはlibv8にバンドルされていますか?

LinuxバージョンのNode.jsはlibv8にバンドルされていますか?

Node.jsがlibv8にアクセスする方法は少し混乱しています。

Node.jsバージョン6.5.0用の64ビット「Linuxバイナリ(.tar.xz)」をダウンロードし、/optDebian Linuxコンピュータに解凍します。走ると手node -e "console.log(process.versions.v8)"5.1.281.81入るはいNode 6.5.0で実行されている最新バージョンのV8を見たいです。しかし、DebianのSynaptic Package Managerを見ると、そのnodejsパッケージはlibv8-3.14.5以前のバージョンのV8に依存しています。

それではどれですか? Nodeはインストールされたlibv8を使用します(パッケージマネージャは私のコンピュータに3.14.5がインストールされているとマークします)、またはV8はNode.jsにバンドルされていますか?バイナリにコンパイルしますかnode?それでは、パッケージマネージャにlibv8依存関係があるのはなぜですか?

ベストアンサー1

Node.jsをダウンロードするときダウンロードサイト、あなたが得るバイナリはlibv8 5.1.281.81に静的にリンクされています。これを確認する方法はいくつかあります。

  • libv8バイナリファイルで検索:

    strings bin/node | less -plibv8
    

    (これを行うと、バイナリの「5.1.281.81」文字列にリンクされます)

  • バイナリのシンボルを一覧表示して設定します。

    nm bin/node | c++filt | less -pv8::
    

    v8::シンボルはlibv8からのものです)。

ダウンロードしたアーカイブはDebianのパッケージングシステムを使用しないため、パッケージマネージャの依存関係は考慮されません。このパッケージを明示的にインストールしないと、libv8-3.14.5システムにインストールされている他のパッケージがこのパッケージに依存する可能性があります。実際に必要なものがない場合は、それを削除すると、バイナリがlibv8-3.14.5なくてもnodeバイナリが正しく機能することがわかります。/opt

それにもかかわらず、Node.jsパッケージのバージョンを使用しても、libv8の依存関係を必ずしも見ることはできません。Node.jsにはV8エンジンのソースコードが含まれています。;別のライブラリではありません(少なくともNode.jsの場合ではありません)。

(上記のコマンドを実行するには、およびをインストールする必要がありますbinutils。)nmc++filt

おすすめ記事