Edited at

ruby2.2.0 + chef-zero で../fbuffer/fbuffer.h:175:47: error: マクロ "rb_str_new" は引数を 2 要求しますが、1 個しか与えられていません

More than 3 years have passed since last update.

ruby2.2.0を入れて、chefzeroを入れようとしたら表題のエラー


Gemfile

gem "chef"

gem "chef-zero"


エラー内容

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

/home/rails/.rbenv/versions/2.2.0/bin/ruby -r ./siteconf20150218-11650-18cozd7.rb extconf.rb
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling generator.c
generator.c:1 から include されたファイル中:
../fbuffer/fbuffer.h:175:47: error: マクロ "rb_str_new" は引数を 2 要求しますが、1 個しか与えられていません
In file included from generator.c:1:
../fbuffer/fbuffer.h: In function ‘fbuffer_to_s’:
../fbuffer/fbuffer.h:175: 警告: initialization makes integer from pointer without a cast
make: *** [generator.o] エラー 1

make failed, exit code 2

Gem files will remain installed in /home/rails/chef-zero/vendor/ruby/2.2.0/gems/json-1.7.7 for inspection.
Results logged to /home/rails/chef-zero/vendor/ruby/2.2.0/extensions/x86_64-linux/2.2.0-static/json-1.7.7/gem_make.out
An error occurred while installing json (1.7.7), and Bundler cannot continue.
Make sure that `gem install json -v '1.7.7'` succeeds before bundling.

json gemのコンパイルがうまくいかないもよう

デフォルトでjson 1.7.2が入るみたいなのだけど、

その中で呼ばれるfbuffer_to_sでおこられている。

対象行を見ると

static VALUE fbuffer_to_s(FBuffer *fb){

VALUE result = rb_str_new(FBUFFER_PAIR(fb)); #ここ
...

ってなってて,どうやらこの引数が足りていないの??

マクロは

#define FBUFFER_PAIR(fb) FBUFFER_PTR(fb), FBUFFER_LEN(fb)

になっているんだけど、

そしたら同じ人達がここにいて

https://github.com/flori/json/issues/229

ここでもうすでに修正されていた(1.8.2)

cのマクロのとこでつまずいているみたいだけど、cはもう覚えていないので適当にふーん

https://github.com/flori/json/commit/18b3000090d1044425d369a58ebe52f5342b9699

解決策は、gemfileで1.8.2を指定する


Gemfile

gem "json" ,'1.8.2'

gem "chef"
gem "chef-zero"

これでいいのかな?

とりあえずbundle installはうまくいきました ;)