=== TLDR ===
로 지침의 상태, 최신 그 소리 컴파일러 빌드 루비, 또는 젬 컴파일하는 데 사용할 적어도 동일한 버전 노코 기리의 기본 확장 libxml 및 libxsl.
RVM을 사용하는 경우 --with-ggc=clang
플래그로 소스에서 빌드 하면 나에게 도움이되었습니다.
rvm install 2.2 --with-gcc=clang
2.2
원하는 버전으로 교체하십시오 . --with-gcc=clang
소스에서 RVM 빌드를 보장하고 clang을 사용하여 그렇게합니다. 그렇지 않으면 RVM은 사전 빌드 된 바이너리 Ruby 일 수 있습니다.
그런 다음 Bundler 또는 Rubygems를 사용하여 Nokogiri를 정상적으로 설치하십시오.
=== 깊이 있음 ===
나는 이것을 잠시 동안 고투했다. gem install nokogiri
줬어:
checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no
파고 들어 mkmf.log
보았다 :
conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }
Nokogiri는 자체 libxml 및 libxsl을 제공합니다 (1.6.4 기준). gem 설치 디렉토리 아래에있는 nokogiri의 parser.h 로컬 사본에 정의 된 서명은 다음과 같습니다.
xmlParseDoc (const xmlChar *cur);
그래서 완전히 밀폐 된 conftest.c 파일 사용법의 메소드 호출이 parser.h의 헤더 파일과 일치하지 않는 방법에 대해 손실되었습니다.
내가 바이너리 바이너리를 설치했다는 것을 깨달았을 때 --with-gcc=clang
(컴파일을 강제하고 clang을 사용하여) 제거하고 다시 설치 하면 문제가 해결되었습니다.
rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri
시스템 libxml 헤더 /usr/include/libxml2/libxml/parser.h
가 Nokogiri의 로컬 사본과 동일한 서명을 갖는 이유를 정확히 모르겠습니다 .
이상하지만 효과가있었습니다. clang으로 Ruby를 컴파일하십시오.