web-dev-qa-db-ja.com

json gemのインストール方法-gemネイティブ拡張のビルドに失敗しました(mac 10.10)

OS:Mac OS X 10.10.3 XCode:コマンドラインツールがインストールされた最新バージョン(バージョン6.3)Rails:バージョン4.2.1 Ruby:バージョン2.2.1

エラーメッセージが表示されたときに、バンドルインストールとバンドルexecを行うことを推奨して、作業中のプロジェクトのルートを生成しようとしていました(定期的に実行しています)。今回、JSON Gem(バージョン1.7.7)のコンパイル中にプロセスが中断しました。

StackOverflowで調査を行ったところ、Xcodeのコマンドラインツールを更新することが推奨されましたが、私は更新しましたが、問題は解決しませんでした。

JSONバージョン1.7.7を個別にインストールしようとしましたが、失敗し、エラーログインを探すように指示されました。

/Users/zwb/.rvm/rubies/Ruby-2.2.1/bin/Ruby -r ./siteconf20150411-36070-1t083xl.rb extconf.rb
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling generator.c
In file included from generator.c:1:
./../fbuffer/fbuffer.h:175:47: error: too few arguments provided to function-like macro invocation
    VALUE result = rb_str_new(FBUFFER_PAIR(fb));
                                              ^
/Users/zwb/.rvm/rubies/Ruby-2.2.1/include/Ruby-2.2.0/Ruby/intern.h:793:9: note: macro 'rb_str_new' defined here
#define rb_str_new(str, len) __extension__ (    \
        ^
In file included from generator.c:1:
./../fbuffer/fbuffer.h:175:11: warning: incompatible pointer to integer conversion initializing 'VALUE' (aka 'unsigned long') with an expression of type 'VALUE (const char *, long)' [-Wint-conversion]
    VALUE result = rb_str_new(FBUFFER_PAIR(fb));
          ^        ~~~~~~~~~~
1 warning and 1 error generated.
make: *** [generator.o] Error 1

make failed, exit code 2
33
zwb

ただし、悲しいことに、JSON-1.7.7(および1.8.1まで)は、Ruby-2.2.xでは 非互換 です。 Ruby-2.2.1を使用しているため、動作しません。

次の2つのオプションがあります。

  1. json gemを_1.8.2_バージョンに更新します。 -好ましい
  2. _Ruby-2.2.1/ext/json/fbuffer/fbuffer.h_ファイルを編集し、問題のあるコードをVALUE result = rb_str_new(FBUFFER_PTR(fb), FBUFFER_LEN(fb));に置き換えます。詳細は here をご覧ください
63
RAJ

Ruby 2.2.0以降を使用している場合、json gemは適切にコンパイルされません。これを修正するには、bundle update jsonを発行します。

52
Robert

私もこの問題に遭遇しましたが、ここで提案された修正はどれもそれを解決しませんでした。

Xcodeコマンドラインツールの適切なバージョンを手動で再ダウンロードして再インストールすることでしか解決できませんでした。

https://developer.Apple.com/download/more/?name=command%20line%20tools

0
Ian

gem install json -v '1.8.2'が機能しました。

0
Dan Hodgins