=== TLDR ===
Como indican las instrucciones , construya Ruby con el último compilador de clang, o al menos la misma versión que Rubygems usará para compilar las extensiones nativas de Nokogiri libxml y libxsl.
Si usé RVM, construir desde la fuente con la --with-ggc=clang
bandera fue lo que lo hizo por mí:
rvm install 2.2 --with-gcc=clang
Reemplace 2.2
con la versión que desee. --with-gcc=clang
asegura las construcciones RVM desde la fuente y usa el sonido metálico para hacerlo; de lo contrario, RVM puede ser un Ruby binario preconstruido, que es lo que me hizo tropezar.
Luego, instale Nokogiri de forma normal usando Bundler o Rubygems.
=== EN PROFUNDIDAD ===
Luché con esto por un tiempo. gem install nokogiri
me dio:
checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no
Cavando en mkmf.log
vi:
conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }
Nokogiri suministra sus propios libxml y libxsl (a partir de 1.6.4). La firma definida en la copia local de Nokogiri de parser.h (que se encuentra en el directorio de instalación de gemas) es:
xmlParseDoc (const xmlChar *cur);
Así que no sabía cómo la llamada al método en el uso herméticamente sellado del archivo conftest.c no podía coincidir con el archivo de encabezado para parser.h.
Cuando me di cuenta de que probablemente había instalado un Ruby binario que eliminé y reinstalé usando --with-gcc=clang
(para forzar la compilación y usar clang) y el problema se resolvió:
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
No estoy exactamente seguro de por qué eso funciona como el encabezado libxml del sistema /usr/include/libxml2/libxml/parser.h
tiene la misma firma que la copia local de Nokogiri.
Es raro, pero funcionó. Solo asegúrate de compilar un Ruby con sonido metálico.