![Linux 版本的 Node.js 是否与 libv8 捆绑在一起?](https://linux22.com/image/94193/Linux%20%E7%89%88%E6%9C%AC%E7%9A%84%20Node.js%20%E6%98%AF%E5%90%A6%E4%B8%8E%20libv8%20%E6%8D%86%E7%BB%91%E5%9C%A8%E4%B8%80%E8%B5%B7%EF%BC%9F.png)
我对 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
了是我希望看到最新版本的 V8 与 Node 6.5.0 一起运行。然而,当我查看 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