Error al instalar json gem 'mkmf.rb no puede encontrar archivos de encabezado para ruby'


407

Por contexto, en un servidor remoto que tiene un firewall. Estoy configurando mi entorno a través de un proxy. Tengo ruby 1.8.7. Cuando intento instalar gema ...

sudo gem install --http-proxy <host address>:<port> json

Obtuve el siguiente error:

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

Como no estaba seguro de cuál es el problema, busqué en Google y encontré estos

¿Alguna pista? ¡Gracias!


compruebe la presencia del /usr/lib/ruby/ruby.harchivo, si está presente, muéstrenos un mensaje de error de gem_make.out.
Малъ Скрылевъ

Respuestas:


786

Actualización de la era moderna, como lo afirma mimoralea :

En caso de que esté utilizando ruby ​​2.0 o 2.2 (gracias @ patrick-davey).

sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

o, de forma genérica:

sudo apt-get install ruby-dev

o

sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev

El primer enlace que ha publicado es exactamente su caso: no hay instalado ningún entorno de desarrollo ruby. Se necesita env de desarrollo para compilar extensiones de ruby, que en su mayoría están escritas C. Proxy no tiene nada que ver con el problema: todo se descarga bien, solo falla la compilación.

Le sugiero que instale el paquete ruby-dev( ruby-develpara distribuciones basadas en rpm) en su máquina de destino.

gcc paquete podría ser necesario también.

Tratar:

$ sudo apt-get install ruby-dev

O, para la distribución Redhat:

$ sudo yum install ruby-devel

O, para [abierto] SuSE:

$ sudo zypper install ruby-devel

2
¡Gracias! Quise decir que la respuesta en esa pregunta parecía específica del módulo. Creo que en lugar de ruby-devsu ruby-devel. Aquí es donde encontré lo que necesitaba exactamente: digitalocean.com/community/articles/…
Navneet

99
Después de instalar ruby-devel (en Fedora 20), recibí el error *** extconf.rb falló ***. Una vez que instaló gcc como sugirió, todo funcionó bien.
Wayne Riesterer

Puede agregar sudo zypper install ruby-develpara openSUSE
superbob

Esto no hace nada en Ubuntu. El paquete que falta es ruby2.2-dev(o la versión que haya instalado).
Luís de Sousa

2
No, esta respuesta no ayudó a resolver nada. La respuesta correcta es la de mimoralea .
Luís de Sousa

178

Para Xcode 11 en macOS 10.14 , esto puede suceder incluso después de instalar Xcode e instalar herramientas de línea de comandos y aceptar la licencia con

sudo xcode-select --install
sudo xcodebuild -license accept

El problema es que Xcode 11 incluye el SDK de macOS 10.15 que incluye encabezados para ruby2.6, pero no para ruby2.3 de macOS 10.14. Puede verificar que este sea su problema ejecutando

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

que en macOS 10.14 con Xcode 11 imprime la ruta inexistente

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Sin embargo, Xcode 11 instala un SDK de macOS 10.14 dentro /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. No es necesario contaminar los directorios del sistema instalando los archivos de encabezado antiguos como se sugiere en otras respuestas. En cambio, al seleccionar ese SDK, se encontrarán los encabezados ruby2.3 apropiados:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

Esto ahora debería imprimirse correctamente

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Del mismo modo, gem installdebería funcionar mientras ese SDK está seleccionado.

Para volver al SDK de Xcode actual, use

sudo xcode-select --switch /Applications/Xcode.app

14
Leyenda. Exactamente mi problema en 10.14.6. Triste no puede votar dos veces.
Diego Freniche

2
Usted, señor, es un oscuro señor del conocimiento. Muchas gracias,
Rubin Simons

¡Gracias por la información detallada! Finalmente funcionó, produciendo el "ERROR: Error al instalar jekyll: jekyll-sass-converter requiere la versión Ruby> = 2.4.0". Eso me hace reir.
Nickolay Olshevsky

@NickolayOlshevsky en ese caso, debe instalar ruby ​​a través de homebrew, actualmente en la versión 2.6.5.
joki

1
Eres una maldita leyenda de la codificación.
Aljosha Novakovic

75

En caso de que esté usando ruby ​​2.0 o 2.2 (gracias @ patrick-davey) o 2.3 (gracias @juanitofatas).

sudo apt-get install ruby-dev
sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

Y obtienes el patrón aquí ...


66
O, si está utilizando 2.2 ...sudo apt-get install ruby2.2-dev
patrickdavey

@ patrick-davey E: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
Aparichith

@dson probablemente usa una versión antigua de Ubuntu. Intenta actualizar.
Pithikos

También recibí el mismo error, y estoy usando una versión completamente actualizada de Linux Mint. No creo que la versión del sistema operativo sea el problema.
Andrew Faulkner el

2
Si está utilizando una versión anterior de Ubuntu como Trusty (14.04), agregue el PPA de Brightbox para Ruby:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu


19

Para aquellos que obtienen esto en Mac OS X, es posible que deba ejecutar el siguiente comando para instalar las herramientas de línea de comandos XCode, incluso si ya tiene XCode instalado:

sudo xcode-select --install

También debe aceptar los términos y condiciones de XCode ejecutando el siguiente comando:

sudo xcodebuild -license

Esta fue la respuesta correcta para mí. No tenía encabezados de desarrollo Ruby. Una vez que instalé xCode, el comando original que intenté ejecutar funcionó. ¡Gracias!
Sweet Chilly Philly

En OSX con Mojave tuve que ejecutar eso como:su - $USER -c 'xcode-select --install'
Belden

Esto también funcionó para mí.
adougies hace

11

Tuve un problema similar al usar cygwin para ejecutar el siguiente comando:

$ gem install rerun

Lo resolví instalando los siguientes paquetes de cygwin:

  • Ruby-Devel
  • libffi-devel
  • gcc-core
  • gcc-g ++
  • hacer
  • automake1.15

Esto me da por hecho:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-

Se resuelve haciendo rm -rf ~/.gem/y volviendo a emitir el comando.
r-

ruby-deven frambuesa pi
CONvid19

11

La solución más votada no funcionó en mi máquina (linux mint 18.04). Después de una cuidadosa mirada, descubrí que faltaba g ++. Resuelto con

sudo apt-get install g ++


1
Esto funcionó para mí en Ubuntu 18.04. También tuve que hacer un sudo apt-get install make antes de que la instalación de g ++ funcione.
Scott Lindner

¡Puedo confirmar la instalación makey también g++solucioné mi problema en Ubuntu 18.04!
Arda

9

en caso de que uses SUSE

sudo yast2 -i ruby-devel

2
Yo prefiero sudo zypper in ruby-devel.
Lesik2008

5

Xcode 11 / macOS Catalina

En Xcode 11 / macOS Catalina, los archivos de encabezado ya no están en la ubicación anterior y en la anterior /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg archivo anterior ya no está disponible.

En cambio, los encabezados ahora están instalados en el /usr/includedirectorio de la ruta actual del SDK:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

La mayor parte de este directorio se puede encontrar utilizando la salida de xcrun --show-sdk-path. Y si agrega esta ruta a la CPATHvariable de entorno, cree scripts (incluidos los llamados víabundle ) generalmente podrán encontrarla.

Resolví esto configurando mi CPATHen mi .zshrcarchivo:

export CPATH="$(xcrun --show-sdk-path)/usr/include"

Después de abrir un nuevo shell (o ejecutar source .zshrc), ya no recibo el mensaje de error mkmf.rb no puedo encontrar los archivos de encabezado para ruby ​​en /usr/lib/ruby/ruby.h y los rubygems se instalan correctamente.

Nota sobre la compilación de plataformas que no son macOS

Si está compilando para plataformas que no son macOS, como iOS / tvOS / watchOS, este cambio intentará incluir el SDK de macOS en esas plataformas, causando errores de compilación. Para resolverlo, no establezca CPATHla variable de entorno al iniciar sesión, o configúrelo temporalmente en blanco cuando se ejecute de esta xcodebuildmanera:

CPATH="" xcodebuild --some-args

2
¿Tiene alguna documentación sobre CPATH? Establecerlo no está resolviendo el problema para mí. Cuando verifiqué su valor en primer lugar, parecía indefinido.
Ilias Karim

1
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html : es posible que deba encontrar una variable de entorno diferente según el idioma / compilador que esté utilizando. Es normal que no esté configurado de forma predeterminada
Aaron Brager, el

Y, en caso de que no lo haya visto en otro lugar, no puede haber espacios en la ruta / nombre de Xcode
Feldur

De todas las respuestas aquí, esta es la única solución que funcionó para mí. Estoy en Mojave 10.14.6y XCode 11.3.1. Muchas gracias, me tomó 1 día para resolver esto: /
user2350644

4

En Fedora 21 en adelante, simplemente abre una terminal e instala los archivos de Ruby Development como root.

dnf install ruby-devel


1

Xcode -> Preferencias -> Ubicaciones

cambiar las herramientas de línea de comandos a Xcode 11.2.1


1

En Mac 10.14, los archivos de encabezado no parecen estar instalados en el lugar correcto. En lugar de cambiar las rutas como las otras soluciones, pude ejecutar esto:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Siga las instrucciones y resolvió este problema para mí.


0

Debe instalar todo el rubí y no solo el paquete mínimo. El comando correcto para usar es:

sudo apt install ruby-full

El siguiente comando tampoco instalará un ruby ​​completo:

sudo apt-get install ruby2.3-dev

0

Para Ubuntu 18, después de verificar el archivo de registro mencionado durante la instalación

Resultados registrados en /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

con

less /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

Me di cuenta de que makeno se encuentra. Así instalado por

sudo apt-get install make

Todo funcionó.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.