Node.jsがlibv8にアクセスする方法は少し混乱しています。
Node.jsバージョン6.5.0用の64ビット「Linuxバイナリ(.tar.xz)」をダウンロードし、/opt
Debian 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
。)nm
c++filt