Pour le contexte, c'est sur un serveur distant qui a un pare-feu. Je configure mon environnement via un proxy. Je l'ai ruby 1.8.7
. Lorsque j'essaie d'installer gem ..
sudo gem install --http-proxy <host address>:<port> json
J'obtiens l'erreur suivante:
Building native extensions. This could take a while...
ERROR: Error installing json:
ERROR: Failed to build gem native extension.
/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h
Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/json-1.8.1/ext/json/ext/generator/gem_make.out
Comme je ne savais pas quel était le problème, j'ai cherché sur Google et trouvé ces
installation de gem: impossible de construire l'extension native de gem (impossible de trouver les fichiers d'en-tête) - les instructions ici semblent être spécifiques au gem en cours d'installation.
Comment installer json gem - Échec de la construction de l'extension native gem Cela semble être une erreur légèrement différente.
Des indices? Merci!
/usr/lib/ruby/ruby.h
fichier, s'il est présent, montrez-nous un message d'erreur degem_make.out
.Réponses:
Mise à jour de l'ère moderne, comme l'a déclaré mimoralea :
ou, de manière générique:
Le premier lien que vous avez publié est exactement votre cas: aucun environnement de développement ruby n'est installé. L'env de développement est nécessaire pour compiler les extensions ruby, qui sont principalement écrites en
C
. Le proxy n'a rien à voir avec le problème: tout est bien téléchargé, la compilation échoue.Je vous suggère d'installer le package
ruby-dev
(ruby-devel
pour les distributions basées sur les rpm) sur votre machine cible.gcc
le package peut également être nécessaire.Essayer:
Ou, pour la distribution Redhat:
Ou, pour [open] SuSE:
la source
ruby-dev
sonruby-devel
. Voici où j'ai trouvé exactement ce dont j'avais besoin - digitalocean.com/community/articles/…sudo zypper install ruby-devel
pour openSUSEruby2.2-dev
(ou la version que vous avez installée).Pour Xcode 11 sur macOS 10.14 , cela peut se produire même après avoir installé Xcode et installé les outils de ligne de commande et accepté la licence avec
Le problème est que Xcode 11 expédie le SDK macOS 10.15 qui comprend des en-têtes pour ruby2.6, mais pas pour ruby2.3 de macOS 10.14. Vous pouvez vérifier que c'est bien votre problème en exécutant
qui sur macOS 10.14 avec Xcode 11 imprime le chemin inexistant
Cependant, Xcode 11 installe un SDK macOS 10.14 dans
/Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk
. Il n'est pas nécessaire de polluer les répertoires système en installant les anciens fichiers d'en-tête comme suggéré dans d'autres réponses. Au lieu de cela, en sélectionnant ce SDK, les en-têtes ruby2.3 appropriés seront trouvés:Cela devrait maintenant s'imprimer correctement
De même,
gem install
devrait fonctionner pendant que ce SDK est sélectionné.Pour revenir au SDK Xcode actuel, utilisez
la source
Dans le cas où vous utilisez ruby 2.0 ou 2.2 (merci @ patrick-davey) ou 2.3 (merci @juanitofatas).
Et vous obtenez le motif ici ...
la source
sudo apt-get install ruby2.2-dev
E: Unable to locate package ruby2.2-dev
E: Couldn't find any package by regex 'ruby2.2-dev'
sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
J'ai également rencontré ce problème parce que j'installe Ruby sur Ubuntu via Brightbox , et je pensais que ruby-dev est le tronc de Ruby . Je n'ai donc pas installé. Installer ruby2.3-dev le corrige:
la source
Pour ceux qui obtiennent cela sur Mac OS X, vous devrez peut-être exécuter la commande suivante pour installer les outils de ligne de commande XCode, même si XCode est déjà installé:
Vous devez également accepter les termes et conditions de XCode en exécutant la commande suivante:
la source
su - $USER -c 'xcode-select --install'
J'ai eu un problème similaire en utilisant cygwin pour exécuter la commande suivante:
Je l'ai résolu en installant les packages cygwin suivants:
la source
/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rm -rf ~/.gem/
et en réexécutant la commande.ruby-dev
sur raspberry piLa solution la plus votée n'a pas fonctionné sur ma machine (Linux Mint 18.04). Après un examen attentif, j'ai trouvé que g ++ manquait. Résolu avec
la source
make
et lag++
résolution de mon problème sur Ubuntu 18.04!au cas où vous utilisez SUSE
la source
sudo zypper in ruby-devel
.Xcode 11 / macOS Catalina
Sur Xcode 11 / macOS Catalina, les fichiers d'en-tête ne se trouvent plus à l'ancien emplacement et l'ancien
/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
fichier n'est plus disponible.Au lieu de cela, les en-têtes sont maintenant installés dans le
/usr/include
répertoire du chemin actuel du SDK:La plupart de ce répertoire peut être trouvé en utilisant la sortie de
xcrun --show-sdk-path
. Et si vous ajoutez ce chemin à laCPATH
variable d'environnement, alors les scripts de construction (y compris ceux appelés viabundle
) seront généralement en mesure de le trouver.J'ai résolu cela en définissant mon
CPATH
dans mon.zshrc
fichier:Après avoir ouvert un nouveau shell (ou exécuté
source .zshrc
), je ne reçois plus le message d'erreur mkmf.rb ne trouve pas les fichiers d'en-tête pour ruby dans /usr/lib/ruby/ruby.h et les rubygems s'installent correctement.la source
Mojave 10.14.6
etXCode 11.3.1
. Merci beaucoup, il m'a fallu 1 jour pour résoudre ce problème: /Dans Fedora 21 et plus, vous ouvrez simplement un terminal et installez les fichiers de développement Ruby en tant que root.
la source
Vous devrez peut-être installer gcc après l'installation de ruby-devel
la source
Xcode -> Préférences -> Emplacements
changer les outils de ligne de commande en Xcode 11.2.1
la source
Sur Mac 10.14, les fichiers d'en-tête ne semblent pas être installés au bon endroit. Plutôt que de changer de chemin comme les autres correctifs, j'ai pu simplement exécuter ceci:
Suivez les instructions et cela a résolu ce problème pour moi.
la source
Vous devez installer le rubis entier et pas seulement le paquet minimum. La commande correcte à utiliser est:
La commande suivante n'installera pas non plus un rubis complet:
la source
Pour Ubuntu 18, après avoir vérifié le fichier journal mentionné lors de l'installation
Résultats enregistrés dans /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out
avec
J'ai remarqué que cela
make
ne se trouve pas. Alors installé faire partout fonctionnait.
la source
essayez-le pour ubuntu 16.04
la source