2019/11/19

node-ffi 公式は node 12 でビルドが通らない

node から直接Cのライブラリを呼び出せる ffi というライブラリを インストールしようとしたところ、以下のようなエラーが出てインストール出来ませんでした。

$ npm install --save ffi
 
> ref@1.3.5 install /home/yusuke/ffi_sample/node_modules/ref
> node-gyp rebuild
 
make: Entering directory '/home/yusuke/tmp/node_modules/ref/build'
  CXX(target) Release/obj.target/binding/src/binding.o
../src/binding.cc: In function ‘Nan::NAN_METHOD_RETURN_TYPE {anonymous}::WriteObject(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/binding.cc:222:43: error: no matching function for call to ‘v8::Value::BooleanValue()’
   bool persistent = info[3]->BooleanValue();
 
... 省略
 
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:210:5)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)

依存している ref というライブラリのビルドに失敗しているようです。

この v8::Value::BooleanValue() 等の参照関数はだいぶ前から deprecated だったようです。 そして、node v.12 でついに削除されました。 そのため、node v.12 以降ではビルドが通らなくなってしまったのです。

解決策(一時的な)

幸いなことに、この問題は既に PullRequest として報告されていました。

参考

Support Node v12.0.0 by lxe · Pull Request #114 · TooTallNate/ref · GitHub

ところが、この修正にも問題があって、この修正に対する PullRequest も上がっています1。 そして、ref だけでなく ffi 自体と関連するライブラリにも同じ問題があり、修正が必要です。

参考

Support Node v12.0.0 by lxe · Pull Request #544 · node-ffi/node-ffi · GitHub

とまぁ、たらい回しに探していった結果、fishg/node-ffi 上の修正が要件をみたしているようです。

レポ指定2でインストールすれば使えます。

$ npm install "ffi@fishg/node-ffi.git#node-12"

しかし、refffi はどちらも1年近くメンテナンスされていません。 この node v.12 に対応する PullRequest も半年以上放置。 正式に対応する日はくるのでしょうか?

そして、deprecated な関数をかなり呼んでます。 つまり、また node のバージョンが上がったらビルドが通らなくなる可能性大。

  1. そういう場合、本線にはどうマージされるんだろう…? 
  2. github の場合、ホスト名等を省略できる。知らなかった… 
?

0 件のコメント: