[ruby] Mac 사용자 및 경고 : Nokogiri는 LibXML 버전 2.7.8에 대해 빌드되었지만 2.7.3을 동적으로로드했습니다.

나는 온갖 종류의 조사를했고 여러 가지를 시도했습니다. 이 질문에 여러 번 답변을 받았지만 제안 된 솔루션 중 어느 것도 저에게 효과적이지 않습니다.

Lion으로 업그레이드 한 후 Ruby에서 세그멘테이션 오류가 발생합니다. 노코 기리라고 꽤 확신합니다. 그래서 Homebrew를 통해 libxml2를 설치했습니다. 나는 달렸다 brew link libxml2. 그런 다음 해당 버전의 라이브러리를 사용하여 Nokogiri를 다시 설치했습니다.

증거를 위해 :

$ nokogiri -v
# Nokogiri (1.5.0)
---
warnings: []
nokogiri: 1.5.0
ruby:
  version: 1.9.2
  platform: x86_64-darwin11.0.0
  description: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
  engine: ruby
libxml:
  binding: extension
  compiled: 2.7.8
  loaded: 2.7.8

이미 gemfile의 맨 위에 Nokogiri를 포함 시켰으며 환경 파일에도 필요했습니다. 왜 여전히 경고를 받고 있는지 모르겠습니다.

올바른 버전의 libxml2를로드하고 있는지 확인하기위한 제안이나 아이디어가 있습니까?



답변

이 경고를 통해 아침의 더 좋은 시간을 보냈습니다. 이 수정 사항은 Mac OS Lion 사용자를위한 것입니다. 위의 수정 사용

bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local

MacPorts를 통해 libxml2가 설치된 Snow Leopard 용입니다.

Lion을 사용하면 libxml2가 부트 스트랩 프로세스의 일부로로드됩니다. libxml2 Nokogiri가 가리키는 것과 관계없이 libxml2 용 Lion 시스템 기본 라이브러리가 런타임에 사용됩니다. Lion은 /usr(아님 /usr/local)에 있는 libxml2.2.7.3을 사용합니다 .

다른 많은 곳에서 언급했듯이 경고를 무시할 수 있습니다. 나처럼 경고가 당신을 미치게 만든다면 다음과 같이 할 수 있습니다.

bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local

흥미롭게도 nokogiri -v명령 줄에 입력 하면 반대 경고가 표시됩니다.

WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8

이것은 libxml2가로드되는 방법에 더 많은 것이 있음을 시사합니다. Ruby와 Rails는 시스템로드 된 libxml2를 사용하고 명령 줄은 환경 경로에서 libxml2를 사용합니다. 어쨌든 이것은 나를 위해 오류를 침묵시킵니다.

다시 말하겠습니다 – 이것은 오직 Lion만을위한 것입니다. 이전 수정 사항은 Snow Leopard에서 작동합니다.

이것이 답의 끝입니다. 여기서 그만 읽으세요.


좋아, 당신은 읽는 것을 멈추지 않았습니다 … 글쎄 …

권장하지 않습니다 !!!!!!

경고를 받았습니다. 에서 찾은 libxml2를 비활성화하여 Mac OSX가 부트 스트랩에서 libxml2 라이브러리를로드하고 있는지 확인할 수 있습니다 /usr/lib. 의 모든 버전을 복사하는 것과 같은 작업 libxml2*.dylib을 수행하십시오 libxml2*.dylib.old(내 컴퓨터에서는 libxml2.2.7.3, libxml2.2libxml2).

이 작업을 수행 한 후 Nokogiri를 실행해도 오류가 발생하지 않습니다. 이로드 libxml2를 찾을 수없는 지금은 결국 발견, 환경 경로를 따를 것이다 때문이다 libxml2.2.7.8에서 /opt/local.

그러나 이전 libxml 파일을 다시 복사 할 수 없습니다. 이는 OS에 부트 스트랩에로드 된 libxml2가 필요하기 때문입니다.

전원을 껐다가 다시 켜면 컴퓨터가 손상됩니다. 로그인 화면이 중단되고 중단됩니다. 전원을 끄고 전원 단일 사용자 모드에서 다시 (보류 CommandS재부팅 동안). 부트 스트랩이 발생하는 것을 볼 수 있습니다. 낮고 보라, libxml2를로드 할 수 없다는 오류가 발생하고 작동이 중지됩니다.

전원을 껐다가 다시 켜십시오. 이번에는 복구 모드로 부팅합니다 (보류 CommandR또는 Option복구 디스크 선택). 복구 모드에서 터미널 ( utilities/terminal)을 엽니 다 . /usr/libHD에 마운트 하고 (try /Volumes/Macintosh\ HD/usr/lib) libxml2 파일을 다시 복사합니다. 재부팅하면 모두 괜찮습니다.


답변

를 사용하여 Nokogiri를 설치 한 경우 gem install nokogiri실행 gem pristine nokogiri하여 gem의 C 확장을 다시 컴파일 하여이 경고를 해결할 수 있습니다 .

를 사용하여 Nokogiri를 설치 한 경우 Bundler가 설치된 위치에 관계없이 gem의 C 확장을 다시 컴파일 bundle install하여이 경고를 해결할 수 있습니다 bundle exec gem pristine nokogiri.


답변

homebrew 및 bundler를 사용하는 경우이 문제를 해결하려면을 gem 'nokogiri' 맨 위에 추가 Gemfile한 후 다음 명령을 실행 하십시오 .

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2 --with-xml2-config
brew install libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
bundle install

번 들러를 사용하지 않는 경우 다음 명령을 대신 실행하십시오.

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2 --with-xml2-config
brew install libxslt
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/

앱에서로드 할 라이브러리를 지정하지 못한 gem에서로드 한 libxml2의 이전 시스템 버전 대신 동적 libxml2 라이브러리를 앱이로드하도록 강제하려면 먼저 nokogiri요구 해야 합니다 .


답변

이 중 어느 것도 나를 위해 일하지 않았습니다.

brew와 함께 최신 버전 (2.7.8)에 libxml2를 설치했습니다. 이로 인해 nokogiri가 그것에 대해 컴파일하고 나중에 문제가 발생했습니다. 솔루션을 제거하고 빌드 한 다음 원하는 경우 설치하십시오.

효과는 다음과 같습니다.

  • brew uninstall libxml2 (이전에 설치된 경우)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (선택 과목)


답변

Mountain Lion으로 업데이트 한 후 해결 방법은 훨씬 간단했습니다.

gem uninstall nokogiri
# (and ignore the warnings about dependencies)
gem install nokogiri


답변

위의 patrickmcgraw의 의견에 따라 단순히 내 Gemfile의 첫 번째 항목으로 nokogiri를 넣는 것이 저에게 효과적이었습니다. 원문이 묻혀 있기 때문에 별도의 답변으로하겠습니다.

source 'http://rubygems.org'
gem 'nokogiri'
gem 'rails', '3.0.20'
etc...


답변

Bundler에는 기본 빌드 위치를 설정하는 옵션이 있습니다. 예를 들어 libxml2가 macports를 통해 설치된 경우 :

$ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local

이 및을 수행 한 후 bundle install경고가 사라졌습니다.

nokogiri wiki 에 빌드 옵션을 설정하는 데 유용한 몇 가지 예도 있습니다 .