Người dùng Mac và nhận được CẢNH BÁO: Nokogiri được xây dựng dựa trên LibXML phiên bản 2.7.8, nhưng đã tải động 2.7.3


82

Tôi đã thực hiện tất cả các loại nghiên cứu và thử nhiều thứ khác nhau. Tôi biết câu hỏi này đã được trả lời nhiều lần, nhưng không có giải pháp nào được đề xuất phù hợp với tôi.

Sau khi nâng cấp lên Lion, tôi gặp lỗi phân đoạn trong Ruby. Tôi khá tin tưởng đó là Nokogiri. Vì vậy, tôi đã cài đặt libxml2 thông qua Homebrew. Tôi đã chạy brew link libxml2. Sau đó, tôi đã cài đặt lại Nokogiri bằng cách sử dụng phiên bản thư viện đó.

Để làm bằng chứng:

$ 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

Tôi đã bao gồm Nokogiri ở đầu tệp gem của mình và tôi cũng yêu cầu nó trong tệp môi trường của mình. Tôi không biết tại sao tôi vẫn nhận được cảnh báo đó.

Bất kỳ đề xuất hoặc ý tưởng để đảm bảo rằng nó đang tải đúng phiên bản libxml2?


9
Nokogiri 1.6 trở lên hiện đóng gói libxml2 với gem, vì vậy bạn có thể khắc phục lỗi này bằng cách xóa libxml2 khỏi Homebrew. brew remove --force libxml2 bundle config --delete build.nokogiri gem uninstall nokogiri libxml-ruby bundle
Nate Berkopec


@NateBerkopec. Giải pháp của bạn phù hợp với tôi trong khi câu trả lời được chấp nhận thì không.
egyamado

1.6.2.1Ubuntu 12.04không chơi đẹp. Quay lại để 1.6.1sửa nó sau khi thử mọi cách sửa lỗi khác mà tôi có thể tìm thấy.
Damien Roche

Câu trả lời:


39

Tôi chỉ dành phần tốt hơn của buổi sáng để làm việc thông qua cảnh báo này. Bản sửa lỗi này dành cho những người sử dụng Mac OS Lion. Cách khắc phục ở trên bằng cách sử dụng

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

dành cho Snow Leopard với libxml2 được cài đặt qua MacPorts.

Với Lion, libxml2 được tải như một phần của quá trình bootstrap. Bất kể Nokogiri đang trỏ đến libxml2 nào, thư viện mặc định của hệ thống Lion cho libxml2 sẽ được sử dụng trong thời gian chạy. Lion sử dụng libxml2.2.7.3 được tìm thấy trong /usr(not /usr/local).

Như đã đề cập ở nhiều nơi khác, người ta có thể bỏ qua cảnh báo. Nếu, giống như tôi, cảnh báo khiến bạn phát điên, bạn có thể làm điều này:

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

Thật thú vị, nếu bạn nhập nokogiri -vvào dòng lệnh, bạn sẽ nhận được cảnh báo ngược lại:

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

Điều này cho thấy có nhiều điều hơn về cách libxml2 đang được tải, với Ruby và Rails sử dụng libxml2 được hệ thống tải và dòng lệnh sử dụng libxml2 từ đường dẫn môi trường. Dù sao, điều này im lặng lỗi cho tôi.

Tôi sẽ nói lại lần nữa - điều này chỉ dành cho Sư Tử. Bản sửa lỗi trước đó sẽ hoạt động đối với Snow Leopard.

Đây là phần cuối của câu trả lời. Dừng đọc ở đây.


OK, bạn đã không ngừng đọc ... tốt ...

KHÔNG ĐƯỢC KHUYẾN KHÍCH!!!!!!

Bạn đã được cảnh báo. Bạn có thể xác minh rằng Mac OSX đang tải thư viện libxml2 trong bootstrap của nó bằng cách tắt libxml2 có trong đó /usr/lib. Làm điều gì đó như sao chép tất cả các phiên bản của libxml2*.dylibsang libxml2*.dylib.old(trên máy của tôi cái này là libxml2.2.7.3, libxml2.2libxml2).

Sau khi bạn thực hiện việc này, việc chạy Nokogiri sẽ không tạo ra bất kỳ lỗi nào. Đó là bởi vì nó không thể tìm thấy libxml2 đã tải và bây giờ sẽ đi theo đường dẫn môi trường, cuối cùng sẽ tìm thấy libxml2.2.7.8trong /opt/local.

NHƯNG bạn sẽ không thể sao chép lại các tệp libxml cũ. Điều này là do hệ điều hành cần libxml2 đã được tải trong bootstrap.

Tắt nguồn và bật lại nguồn sẽ làm máy của bạn bị hỏng. Màn hình đăng nhập sẽ bị treo và bị treo và bị treo. Tắt nguồn và bật lại nguồn ở chế độ một người dùng (giữ Command- Strong khi khởi động lại). Bạn có thể xem quá trình khởi động xảy ra. Thấp và này, nó ném ra một lỗi rằng nó không thể tải libxml2 và sau đó ngừng hoạt động.

Tắt nguồn và bật lại nguồn. Lần này khởi động vào chế độ khôi phục (giữ Command- Rhoặc giữ Optionrồi chọn đĩa khôi phục). Trong chế độ khôi phục, mở terminal ( utilities/terminal). Gắn /usr/libtrên HD của bạn (thử /Volumes/Macintosh\ HD/usr/lib) và sao chép các tệp libxml2 trở lại. Khởi động lại và tất cả sẽ ổn.


1
heh ... hướng dẫn của bạn để phân chia các tùy chọn xây dựng giữa / usr và / opt / local (MacPorts) đã làm nó cho tôi ... thanks
Phillip Koebbe

Vui mừng khi thấy ai đó thông minh hơn tôi cũng giảm afoul của libxml2 cơn ác mộng của Apple Bootstrap :)
Kenton

Tôi chỉ tình cờ xem được bài đăng này một cách ngẫu nhiên và không có ích lợi gì, nhưng câu trả lời chi tiết này xứng đáng nhận được nhiều sự ủng hộ cho nỗ lực!
starscream_disco_party

2
Tôi đã sử dụng một biến thể trên giải pháp này (trong đó phiên bản được tải động của tôi là 2.9.0):bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
sberkley

Cảm ơn @sberkley về mẹo cập nhật. Tôi nhận thấy, khi tôi chạy nó, rằng nếu bạn làm điều đó tại ~, nó dường như đặt giá trị này trên toàn cầu. Vì vậy, có lẽ bạn chỉ có thể làm điều này một lần và không bao giờ phải lo lắng về nó nữa.
duma

97

Nếu bạn đã cài đặt Nokogiri với gem install nokogiri, bạn có thể giải quyết cảnh báo này bằng cách chạy gem pristine nokogiriđể biên dịch lại phần mở rộng C của gem.

Nếu bạn đã cài đặt Nokogiri với bundle install, bạn có thể giải quyết cảnh báo này bằng cách chạy bundle exec gem pristine nokogiriđể biên dịch lại phần mở rộng C của đá quý ở bất cứ nơi nào Bundler cài đặt nó.


5
Tuyệt vời cảm ơn bạn. bundle exec gem pristine nokogiriđóng đinh nó.
toxaq

1
Hoạt động hoàn hảo đối với tôi với cảnh báo về việc được xây dựng dựa trên 2.8.0 bằng cách tải động 2.7.8 trên Ubuntu 12.04
richard

để nhận được cảnh báo biến mất trên Lion và rails 3.2.16, tôi phải thực hiện cả 'gói thực thi gem nguyên sơ nokogiri' và cũng di chuyển 'gem nokogiri' trước 'gem rails'
jpw 14/12/13

1
Điều này làm việc cho tôi trong OS X Mavericks, câu trả lời được chấp nhận thì không.
CBanga

Đây phải là câu trả lời được chấp nhận, không phải là thứ có thể làm hỏng máy của bạn, chứ đừng nói là cực kỳ dài dòng và khó hiểu.
Greg Blass

58

Để khắc phục sự cố này nếu bạn đang sử dụng homebrew và Bundler, hãy thêm gem 'nokogiri' vào đầu của bạn Gemfile, sau đó chạy các lệnh sau:

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

Nếu bạn không sử dụng gói, hãy chạy các lệnh sau:

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/

Trong ứng dụng của bạn, trước tiên bạn nên yêu cầu nokogiri để buộc ứng dụng tải thư viện libxml2 động thay vì phiên bản hệ thống cũ hơn của libxml2 được tải bởi các gem không thể chỉ định thư viện nào sẽ tải.


Tôi không nghĩ rằng các lệnh linkunlinklà cần thiết. Tôi đã có thể đi mà không cần sử dụng chúng.
M. Scott Ford

lưu ý rằng bạn có thể phải thêm các gemlệnh với bundle exec- ví dụ: nếu bạn đang sử dụng rbenv.
không đối xứng

4
Có lý do gì bạn không bao gồm brew uninstall libxslt?
Nate Berkopec

5
Đối với những người sao chép-dán câu trả lời này, phiên bản mới nhất của libxml2 là 2.9.0 - hãy nhớ chỉnh sửa điều này khi sao chép dán!
Nate Berkopec

7
Nó làm nổi bật rằng câu cuối cùng rất quan trọng: yêu cầu nokogiri trước Làm điều này bằng cách đặt nokogiri vào Gemfile của bạn trước đường ray.
Wolfram Arnold

28

Không ai trong số này làm việc cho tôi.

Tôi đã cài đặt libxml2 ở phiên bản mới hơn (2.7.8) với brew. Điều này gây ra nokogiri để biên dịch chống lại nó và các vấn đề sau này. Giải pháp, gỡ bỏ nó, sau đó xây dựng, sau đó cài đặt nếu muốn.

Đây là những gì đã hoạt động:

  • brew uninstall libxml2 (nếu đã cài đặt trước đó)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (không bắt buộc)

3
Điều này đã khắc phục sự cố cho tôi trên OS X 10.8.2 với libxml 2.7.8 / 2.8.0. Chỉ gỡ bỏ nokogiri gem và cài đặt lại nó không giải quyết được nó, nhưng brew uninstall libxml2trước đó đã làm. cảm ơn!
stereoscott

1
câu trả lời hoàn hảo nếu sử dụng homebrew
awenkhh

+1 Hoàn hảo. Điều quan trọng là KHÔNG được cài đặt bất kỳ phiên bản libxml2 nào khác khi bạn cài đặt nokogiri.
Nate Cook

Ngoài ra, đề phòng bất kỳ ai khác là RubyMine, đây là những gì tôi đã giúp tôi sửa lỗi tôi gặp phải bundle installtừ bên trong RubyMine. Bạn có thể thấy lỗi tương tự trong dòng lệnh nếu bạn nhậprake --tasks
Nate Cook

Đây là giải pháp chính xác cho tôi. Tôi đang chạy Mountain Lion và đang sử dụng homebrew (và Intellij IDEA).
duma

16

Giải pháp (đối với tôi) sau khi cập nhật lên Mountain Lion đơn giản hơn nhiều:

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

4
Cảm ơn bạn đã phản hồi, Old Pro. Tôi khuyến khích bạn nên cân nhắc đọc lại Câu hỏi & Đáp về Đặc quyền SO. "Sử dụng phiếu phản đối của bạn bất cứ khi nào bạn gặp một bài đăng cẩu thả, không tốn nhiều công sức hoặc một câu trả lời rõ ràng và có thể không chính xác một cách nguy hiểm." Câu trả lời này rõ ràng phù hợp với một số người, bao gồm cả OP vì vậy tôi không nghĩ rằng nó đảm bảo một sự phản đối.
IAmNaN

1
Do lỗ hổng DOS tiêu thụ cpu được phát hiện gần đây ( vuxml.org/freebsd/843a4641-9816-11e2-9c51-080027019be0.html ), chúng tôi đã cập nhật libxml2 trên FreeBSD, gây ra cảnh báo nokogiri được đề cập. Cài đặt lại như mô tả, đã giải quyết được vấn đề.
user569825

Làm việc cho tôi trên OSX 10.8.5
steakchaser

1
Không, @Tass. cập nhật chỉ cần kiểm tra xem có phiên bản đá quý mới hay không, không có trong trường hợp này. Đã hơn hai năm trôi qua nhưng dường như tôi vẫn nhớ nếu không chạy gỡ cài đặt, bản cập nhật là một NOP. Tôi nghi ngờ rằng phiên bản của nokogiri không thay đổi nhưng các lib cần phải được biên dịch với các tiêu đề khác nhau sau khi nâng cấp hệ điều hành. Nhân tiện, phương pháp này đã hoạt động sau một số bản cập nhật OSX.
IAmNaN

9

Theo nhận xét từ Patrickmcgraw ở trên, chỉ cần đặt nokogiri làm mục nhập đầu tiên trong Gemfile của tôi đã hiệu quả với tôi. Tôi đặt nó như một câu trả lời riêng vì nhận xét ban đầu đã bị chôn vùi.

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

1
Để giải thích về lý do tại sao các công trình này, xem câu trả lời này bởi @Jarrett
Jared Beck

Vâng! Giúp tôi với 'Chú ý: Nokogiri được xây dựng chống LibXML phiên bản 2.8.0, nhưng đã tự động nạp 2.7.8'
Artem Aminov

4

Bundler có các tùy chọn để đặt các vị trí xây dựng mặc định. Ví dụ: với libxml2 được cài đặt qua macports:

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

Sau khi làm điều này và bundle install, cảnh báo biến mất.

Ngoài ra còn có một số ví dụ hữu ích để thiết lập các tùy chọn xây dựng trên wiki nokogiri .


4

Có vẻ như bạn đã cập nhật thư viện hệ thống của mình sau khi cài đặt gem, vì vậy bạn phải cập nhật Nokogiri. Để sử dụng phiên bản lib hiện tại:

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

2

Tôi đã gặp vấn đề tương tự và chỉ giải quyết theo cách này:

Trong trường hợp của tôi, tôi đã cài đặt RVM và tôi có bộ đá quý @global và @project. Cả hai đều đã được cài đặt nokogiri và một trong số chúng đã được xây dựng với libxml khác nhau.

Việc xây dựng lại cả hai (tôi có lý do để làm điều này) đã giải quyết được vấn đề.

Hi vọng điêu nay co ich..


1
gem uninstall nokogiri
bundle  #install nokogiri again

Nếu không thành công với "libxml2 bị thiếu." và bạn thấy gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log đang cố gắng sử dụng "/usr/bin/gcc-4.2 ...", thì bạn đang thiếu /usr/bin/gcc-4.2

Giải pháp:

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

Trước:

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

Sau:

$ 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

Nếu bạn thực sự thiếu libxml2 libxslt, thì

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

FYI: Tôi đang điều hành Mountain Lion với bia và bánh mì gói.



0

Tôi thực sự đã cài đặt 2 phiên bản libxml, một từ nguồn, một từ RPM.

Sau đây là giải pháp hoàn chỉnh của tôi

Tôi đã gỡ cài đặt nguồn (từ thư mục nguồn)

sudo make uninstall

Xóa nhóm

rm -rf ~/.bundle ~/.bundler

Đã cập nhật LD (có thể phải thực hiện việc này dưới dạng root, không phải sudo)

sudo ldconfig

Sau đó, cài đặt lại gói

bundle install

0

Tôi vừa gặp phải vấn đề này (OS X Lion 10.7.5). Thông báo chính xác của tôi là: Nokogiri được xây dựng dựa trên LibXML phiên bản 2.8.0, nhưng đã tải động 2.7.3

Tôi đã thử một số đề xuất được đề cập ở đây, không có đề xuất nào hoạt động, nhưng điều này đã làm:

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

Lời giải thích là: "Điều này xảy ra vì libxml2 mặc định của hệ thống Lion (được tải tại bootstrap) được sử dụng, bất kể libxml2 Nokogiri được xây dựng dựa trên cơ sở nào."

Tín dụng cho: https://coderwall.com/p/o5ewia


0

Hệ điều hành: Maverick 10.9.3

Ruby 1.9.3

CẢNH BÁO: Nokogiri được xây dựng dựa trên phiên bản LibXML 2.9.1, nhưng đã tải động 2.9.0

Giải pháp của tôi:

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"

Hy vọng điều này giúp đỡ


0

Nếu bạn có thông báo này và nokogiri của bạn đã lỗi thời với phiên bản có sẵn từ nguồn gem, chỉ cần chạy bundle update nokogiriđể lấy mã mới và biên dịch lại. Lỗi của bạn sẽ biến mất.


0

HĐH: Catalina

Cảnh báo: cảnh báo nokogiri được xây dựng dựa trên libxml phiên bản 2.9.10 nhưng đã tải động 2.9.4

Tôi đi theo Michiel de Mare bước , nhưng BREW cài đặt libxml2 --with-XML2-config thất bại với lỗi tùy chọn không hợp lệ. Vì vậy, tôi đã cài đặt libxml2 và libxslt và ghi lại kết quả đầu ra từ cả hai lệnh.

 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

Và tôi đã sử dụng các thư mục đó khi định cấu hình gói cho 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

Để tóm tắt, tôi đã thực hiện các bước này

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.