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