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


82

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

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를로드하고 있는지 확인하기위한 제안이나 아이디어가 있습니까?


9
Nokogiri 1.6 이상은 이제 gem과 함께 libxml2를 번들로 제공하므로 Homebrew에서 libxml2를 제거하여이 오류를 수정할 수 있습니다. brew remove --force libxml2 bundle config --delete build.nokogiri gem uninstall nokogiri libxml-ruby bundle
Nate Berkopec


@NateBerkopec. 수락 된 답변은 그렇지 않은 동안 귀하의 솔루션이 저에게 효과적이었습니다.
egyamado 2014

1.6.2.1그리고 잘 Ubuntu 12.04하지 마십시오. 1.6.1내가 찾을 수있는 다른 모든 수정을 시도한 후 다시 수정했습니다.
Damien Roche

답변:


39

이 경고를 통해 아침의 더 좋은 시간을 보냈습니다. 이 수정 사항은 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가 필요하기 때문입니다.

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

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


1
ㅎ ... 당신의 지침 사이의 빌드 옵션을 분할은 / usr 및 / 옵션 / 지역 (MacPorts를)은 ... 나를 위해 감사를했다
필립 Koebbe을

나보다 똑똑한 사람도 Apple Bootstrap libxml2의 악몽
Kenton

나는이 게시물을 무작위로 우연히 발견하고 쓸모가 없었지만이 자세한 답변은 많은 찬성 투표를 할 가치가 있습니다!
starscream_disco_party 2012-08-29

2
이 솔루션에 변형을 사용했습니다 (동적으로로드 된 버전이 2.9.0 임) :bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
sberkley 2013

업데이트 된 팁에 대해 @sberkley에게 감사드립니다. 실행했을 때에서 수행하면 ~이 값을 전역 적으로 설정하는 것 같습니다. 따라서이 작업을 한 번만 수행하면 다시는 걱정할 필요가 없습니다.
duma

97

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

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


5
훌륭 해요, 고맙습니다. bundle exec gem pristine nokogiri못 박았다.
toxaq

1
우분투 12.04에서 2.7.8을 동적으로로드하여 2.8.0에 대해 빌드된다는 경고와 함께 완벽하게 작동했습니다.
richard

Lion and rails 3.2.16에서 사라지라는 경고를 받으려면 'bundle exec gem pristine nokogiri'와 'gem rails'보다 먼저 'gem nokogiri'를 이동해야했습니다.
jpw dec

1
이것은 OS X Mavericks에서 나를 위해 일했지만 수락 된 대답은 그렇지 않았습니다.
CBanga

이것은 매우 장황하고 혼란스러운 것은 말할 것도없고 잠재적으로 컴퓨터를 손상시킬 수있는 것이 아니라 받아 들여진 대답이어야합니다.
Greg Blass

58

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요구 해야 합니다 .


linkunlink명령이 필요 하지 않다고 생각합니다 . 나는 그것들을 사용하지 않고 벗어날 수 있었다.
M. Scott Ford

gem명령 앞에 추가해야 할 수도 있습니다 . bundle exec예를 들어 rbenv.
비대칭

4
포함하지 않은 이유가 brew uninstall libxslt있습니까?
Nate Berkopec

5
이 답변을 복사하여 붙여 넣는 경우 libxml2의 최신 버전은 2.9.0입니다. 복사 붙여 넣기시 반드시 편집하십시오!
Nate Berkopec 2013 년

7
마지막 문장이 중요하다는 점을 강조합니다. 먼저 nokogiri를 요구 합니다. Gemfile에있는 nokogiri를 레일 앞에두면됩니다.
Wolfram Arnold

28

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

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

효과는 다음과 같습니다.

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

3
이것은 libxml 2.7.8 / 2.8.0을 사용하는 OS X 10.8.2에서 나를 위해 수정되었습니다. nokogiri gem을 제거하고 다시 설치해도 문제가 해결되지는 않았지만 brew uninstall libxml2미리 해결되었습니다 . 감사!
stereoscott

1
자작 사용하는 경우 완벽한 해답
awenkhh

+1 완벽합니다. 핵심은 nokogiri를 설치할 때 다른 버전의 libxml2를 설치하지 않는 것입니다.
Nate Cook

또한 다른 사람이 RubyMine 인 경우에 대비하여 bundle installRubyMine 내에서 발생한 오류를 수정하는 데 도움이 되었습니다. 다음을 입력하면 명령 줄에서 동일한 오류를 볼 수 있습니다.rake --tasks
Nate Cook

이것은 나에게 올바른 해결책이었습니다. 저는 Mountain Lion을 실행 중이며 homebrew (및 Intellij IDEA)를 사용하고 있습니다.
duma

16

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

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

4
피드백 주셔서 감사합니다, Old Pro. SO Privileges Q & A를 다시 읽어 보시기 바랍니다. "심각하게 조잡하고 노력이 많이 드는 게시물이나 명확하고 위험 할 정도로 잘못된 답변을 접할 때마다 비추천 투표를 사용하세요." 이 답변은 OP를 포함하여 여러 사람에게 분명히 효과가 있었으므로 반대 투표가 필요하다고 생각하지 않습니다.
IAmNaN 2013 년

1
최근에 발견 된 cpu 소비 DOS 취약점 ( vuxml.org/freebsd/843a4641-9816-11e2-9c51-080027019be0.html )으로 인해 FreeBSD에서 libxml2를 업데이트 하여 문제 의 nokogiri 경고 를 발생 시켰습니다 . 설명대로 재설치하면 문제가 해결되었습니다.
user569825

OSX 10.8.5에서 나를 위해 일했습니다
steakchaser

1
아니, @Tass. update는 단순히 새로운 버전의 gem이 있는지 확인합니다.이 경우에는 없습니다. 2 년이 넘었지만 제거를 실행하지 않고 기억하는 것 같습니다. 업데이트는 NOP였습니다. nokogiri의 버전은 변경되지 않지만 OS를 업그레이드 한 후 libs를 다른 헤더로 컴파일해야한다고 생각합니다. 그런데이 방법은 여러 OSX 업데이트 후에 작동했습니다.
IAmNaN

9

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

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

1
에 대한 설명은 이 작품을 참조하십시오 이 답변 @Jarrett에 의해
자레드 벡

네! '노코 기리가 LibXML 버전 2.8.0에 지어진하지만, 동적으로 2.7.8을로드 경고'와 저를 도와줍니다
아르 템 Aminov

4

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 에 빌드 옵션을 설정하는 데 유용한 몇 가지 예도 있습니다 .


4

gem을 설치 한 후 시스템 라이브러리를 업데이트 한 것 같습니다. 따라서 Nokogiri를 업데이트해야합니다. 현재 lib 버전을 사용하려면 :

 gem install nokogiri -- --use-system-libraries

2

비슷한 문제가 있었고 다음과 같이 해결했습니다.

제 경우에는 RVM이 설치되어 있고 @global 및 @project gem 세트가 있습니다. 둘 다 nokogiri가 설치되어 있고 둘 중 하나는 다른 libxml로 빌드되었습니다.

둘 다 재 구축하면 (이렇게 할 이유가 있습니다) 문제가 해결되었습니다.

도움이 되었기를 바랍니다..


1
gem uninstall nokogiri
bundle  #install nokogiri again

"libxml2 is missing."로 실패하면 "/usr/bin/gcc-4.2 ..."를 사용하려고하는 gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log를 보면 /usr/bin/gcc-4.2가 없습니다.

해결책:

sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2

전에:

$ ll /usr/bin/gcc*
lrwxr-xr-x  1 root  wheel  12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2

후:

$ ll /usr/bin/gcc*
lrwxr-xr-x  1 root  wheel  12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
lrwxr-xr-x  1 root  wheel  12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc

정말 libxml2 libxslt가 누락 된 경우

brew update
brew install libxml2 libxslt
brew link libxml2 libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
bundle

참고 : 저는 양조장과 번 들러로 Mountain Lion을 운영하고 있습니다.



0

실제로 두 가지 버전의 libxml이 설치되어 있습니다. 하나는 소스에서 하나는 RPM에서 하나입니다.

다음은 내 완전한 솔루션입니다.

소스를 제거했습니다 (소스 디렉토리에서).

sudo make uninstall

번들 제거

rm -rf ~/.bundle ~/.bundler

업데이트 된 LD (이 작업을 sudo가 아닌 루트로 수행해야 할 수 있음)

sudo ldconfig

그런 다음 번들을 다시 설치했습니다.

bundle install

0

이 문제를 직접 만났습니다 (OS X Lion 10.7.5). 내 정확한 메시지는 다음과 같습니다. Nokogiri는 LibXML 버전 2.8.0에 대해 빌드되었지만 2.7.3을 동적으로로드했습니다.

여기에 언급 된 몇 가지 제안을 시도했지만 효과가 없었지만 효과가있었습니다.

gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local

설명은 다음과 같습니다. "이것은 어떤 libxml2 Nokogiri가 빌드되었는지에 관계없이 Lion 시스템 기본 libxml2 (부트 스트랩에서로드 됨)가 사용되기 때문에 발생합니다."

크레딧 : https://coderwall.com/p/o5ewia


0

운영체제 : Maverick 10.9.3

루비 1.9.3

경고 : Nokogiri는 LibXML 버전 2.9.1에 대해 빌드되었지만 2.9.0을 동적으로로드했습니다.

내 솔루션 :

gem uninstall nokogiri
brew update
cd /usr/local
brew versions libxml2
git checkout 5dd45d7 /usr/local/Library/Formula/libxml2.rb # libxml version 2.9.0
brew install libxml2
bundle install or gem install nokogiri -v "1.5.11"

이 도움을 바랍니다


0

이 메시지가 있고 nokogiri가 gem 소스에서 사용할 수있는 버전이 오래 되었다면 간단히 실행 bundle update nokogiri하여 새 코드를 가져오고 다시 컴파일하십시오. 당신의 오류는 사라져야합니다.


0

운영체제 : Catalina

경고 : 경고 nokogiri는 libxml 버전 2.9.10에 대해 빌드되었지만 2.9.4를 동적으로로드했습니다.

Michiel de Mare 단계를 따랐 지만 잘못된 옵션 오류로 인해 brew install libxml2 --with-xml2-config가 실패했습니다. 그래서 libxml2와 libxslt를 설치하고 두 명령의 출력을 기록했습니다.

 brew install libxml2                   
==> Downloading https://homebrew.bintray.com/bottles/libxml2-2.9.10_2.catalina.bottle.tar.gz
Already downloaded: /Users/alberto/Library/Caches/Homebrew/downloads/9ddf5cb90fd16a7eb531e37bb748fd392f30214d9fe1568b2b70d28cc368c8f7--libxml2-2.9.10_2.catalina.bottle.tar.gz
==> Pouring libxml2-2.9.10_2.catalina.bottle.tar.gz
==> Caveats
libxml2 is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libxml2 first in your PATH run:
  echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc

For compilers to find libxml2 you may need to set:
  export LDFLAGS="-L/usr/local/opt/libxml2/lib"
  export CPPFLAGS="-I/usr/local/opt/libxml2/include"

For pkg-config to find libxml2 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/libxml2/2.9.10_2: 280 files, 10.6MB

brew install libxslt
==> Downloading https://homebrew.bintray.com/bottles/libxslt-1.1.34.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cbadecf3186f45754220dff4cbdfbb576882a211d615b52249a4c9d8ba4d7c3a?response-content-disposition=attachment%3Bfil
######################################################################## 100.0%
==> Pouring libxslt-1.1.34.catalina.bottle.tar.gz
==> Caveats
To allow the nokogiri gem to link against this libxslt run:
  gem install nokogiri -- --with-xslt-dir=/usr/local/opt/libxslt

libxslt is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libxslt first in your PATH run:
  echo 'export PATH="/usr/local/opt/libxslt/bin:$PATH"' >> ~/.zshrc

For compilers to find libxslt you may need to set:
  export LDFLAGS="-L/usr/local/opt/libxslt/lib"
  export CPPFLAGS="-I/usr/local/opt/libxslt/include"

For pkg-config to find libxslt you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libxslt/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/libxslt/1.1.34: 136 files, 2.8MB

그리고 nokogiri에 대한 번들을 구성 할 때 해당 디렉토리를 사용했습니다.

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

요약하면 다음 단계를 실행했습니다.

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2
brew install libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt
bundle install
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.