読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

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

io.js node.js native addon

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

H:\pj\gyptest>node notepad.js
module.js:335
  Module._extensions[extension](this, filename);
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のコードを読んで確認してみることにする。