io.js + pangyp + VS2015 CTPで簡単なネイティブ・アドオンが動かない → 動いた

公開:2015-04-14 06:08
更新:2020-02-15 04:37
カテゴリ:io.js,node.js,native addon

昨日のエラーであるが、原因は不明だが解消した。

H:\pj\gyptest>node notepad.js
module.js:335
  Module._extensionsextension;
Error: Module did not self-register.
    at Error (native)
    at Module.load (module.js:335:32)
    at Function.Module._load (module.js:290:12)
    at Module.require (module.js:345:17)
    at require (module.js:364:17)
    at Object.<anonymous> (H:\pj\gyptest\notepad.js:1:77)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:428:10)
    at Module.load (module.js:335:32)
    at Function.Module._load (module.js:290:12)

このエラーはどうもアドオンが実行環境のnodeバージョンと一致しないときに出るエラーのようである。で、どうすればよいかはWeb上のリソースでは見つからなかった。で、試しにコマンドラインで

iojs notepad.js

としてみるとあっさり動作した。その前までは

node notepad.js

と入力していた。io.jsは2つのバイナリiojs.exeとnode.exeを持っている。2つとも同じバージョン、同じサイズのバイナリである。試しに「iojs -v」「node -v」で出力されるバージョンを比較すると両方とも「1.6.4」であった。

アドオンについてはnodeの実行ファイル名もチェック対象となっていて不一致のためエラーになっていると推測する。推測が正しいのかmodule.jsのコードを読んで確認してみることにする。