用node-gyp手動編譯node的c++擴充套件模組
阿新 • • 發佈:2019-02-10
又踩坑了,配置永遠比單純的寫程式碼要更花費時間。也更令人挫敗。簡單記一筆吧。
最近在弄的一個視訊拼接的npm包,就有C++擴充套件,npm install 的時候屢屢不成功,後來總算成功了。實際引入的時候又找不到入口。排查了一下就是裡面用到了C++擴充套件,需要重新編譯。後來全域性裝了node-gyp對著報錯把包一個個編譯了一遍,終於成功了。
以下是一些知識點:
C/C++對比javascript在位運算上具有極大優勢,很多轉碼、編碼的功能可以用C/C++擴充套件來提升效能。
C++模組通過預先編譯為.node檔案,然後呼叫process.dlopen() 載入執行。.node檔案實際上在不同平臺下是不一樣的。如圖。
*nix | windows C/C++原始碼 g++/gcc編譯成.node檔案(.so檔案) | VC++編譯成.node檔案(.dll檔案) dlopen載入.node檔案匯出給javascript
gyp的意思是generate your projects。node-gyp是一個node的擴充套件構建工具,通過npm install -g node-gyp
{
"targets": [
{
"target_name": "hello",
"sources": [ "src/hello.cc" ],
"conditions:": [
["OS=='win'",{
"libraries": ["-lnode.lib"]
}]
]
},
]
}
注意經常在手動編譯的時候報錯binding.gyp not found (cwd: /usr/local/bin)
呼叫node-gyp configure
會在當前目錄中穿件Build目錄並生成相關的專案檔案,最後會報一個 gyp info ok
。然後繼續執行 node-gyp build
編譯,在linux下通過make,windows下通過vcbuild,編譯完成後,.node檔案就會出現在
build/Release 目錄下。
也可以直接node-gyp rebuild
, 這個命令相當於clean, configure, build
的結合。