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はもう覚えていないので適当にふーん
解決策は、gemfileで1.8.2を指定する
Gemfile
gem "json" ,'1.8.2'
gem "chef"
gem "chef-zero"
これでいいのかな?
とりあえずbundle installはうまくいきました ;)