web-dev-qa-db-fra.com

Comment installer json gem - Impossible de créer l'extension native gem (mac 10.10)

OS: Mac OS X 10.10.3 XCode: Dernier avec les outils de ligne de commande installés (version 6.3) Rails: version 4.2.1 Ruby: version 2.2.1

J'essayais de générer les routes pour un projet sur lequel je travaille (je le fais régulièrement), quand j'ai reçu un message d'erreur, avec une recommandation que j'effectue l'installation et l'exécution du bundle. Je l'ai fait, et cette fois-ci, le processus s'est interrompu lors de la compilation de JSON Gem (version 1.7.7).

En faisant des recherches sur StackOverflow, la recommandation était de mettre à jour les outils de ligne de commande de Xcode, et je l'ai fait, mais cela n'a pas résolu le problème.

J'ai essayé d'installer la version 1.7.7 de JSON séparément, et cela a échoué, me demandant de rechercher le journal des erreurs:

/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

Malheureusement, JSON-1.7.7 (et jusqu'à 1.8.1) est incompatible avec Ruby-2.2.x. Comme vous utilisez Ruby-2.2.1, cela ne fonctionnera pas pour vous.

Il y a 2 options pour vous:

  1. Mettez à jour votre json gem vers la version 1.8.2. - Préférable
  2. Modifiez le fichier Ruby-2.2.1/ext/json/fbuffer/fbuffer.h Et remplacez le code problématique par VALUE result = rb_str_new(FBUFFER_PTR(fb), FBUFFER_LEN(fb));. Regardez ici pour plus de détails
63
RAJ

Si vous utilisez Ruby 2.2.0 ou supérieur, la gemme json ne se compilera pas correctement. Vous pouvez résoudre ce problème en émettant bundle update json

52
Robert

J'ai également rencontré ce problème, et aucune des corrections suggérées ici ne l'a résolu.

Je n'ai pu le résoudre qu'en téléchargeant et en réinstallant manuellement la version appropriée des outils de ligne de commande Xcode:

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

0
Ian

gem install json -v '1.8.2' a fonctionné pour moi.

0
Dan Hodgins