Mac kullanıcısı ve alma UYARI: Nokogiri, LibXML 2.7.8 sürümüne göre oluşturuldu, ancak dinamik olarak 2.7.3 yüklendi.


82

Her türlü araştırmayı yaptım ve birçok farklı şeyi denedim. Bu sorunun birçok kez yanıtlandığını biliyorum, ancak önerilen çözümlerin hiçbiri benim için işe yaramıyor.

Lion'a yükselttikten sonra Ruby'de segmentasyon hataları alıyorum. Nokogiri olduğuna oldukça eminim. Ben de libxml2'yi Homebrew aracılığıyla kurdum. Kaçtım brew link libxml2. Sonra Nokogiri'yi kütüphanenin bu sürümünü kullanarak yeniden yükledim.

Kanıt için:

$ 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

Zaten Nokogiri'yi gem dosyamın en üstüne ekledim ve ayrıca ortam dosyamda da gerekli kıldım. Neden hala bu uyarıyı aldığımı bilmiyorum.

Doğru libxml2 sürümünü yüklediğinden emin olmak için herhangi bir öneri veya fikriniz var mı?


9
Nokogiri 1.6 ve üstü artık libxml2'yi gem ile birlikte paketliyor, bu nedenle bu hatayı sadece libxml2'yi Homebrew'den kaldırarak düzeltebilirsiniz. brew remove --force libxml2 bundle config --delete build.nokogiri gem uninstall nokogiri libxml-ruby bundle
Nate Berkopec


@NateBerkopec. Çözümünüz benim için çalıştı ancak kabul edilen cevap işe yaramadı.
egyamado

1.6.2.1ve Ubuntu 12.04iyi oynama. Bulabildiğim 1.6.1diğer tüm düzeltmeleri denedikten sonra düzeltmek için geri bırakıyorum .
Damien Roche

Yanıtlar:


39

Sabahın büyük bir bölümünü bu uyarı üzerinde çalışarak geçirdim. Bu düzeltme, Mac OS Lion kullanan kişiler içindir. Kullanarak yukarıdaki düzeltme

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

MacPorts aracılığıyla libxml2 yüklenmiş Snow Leopard içindir.

Lion ile libxml2, önyükleme işleminin bir parçası olarak yüklenir. Nokogiri'nin hangi libxml2'yi işaret ettiğinden bağımsız olarak, libxml2 için Lion sistemi varsayılan kitaplığı çalışma zamanında kullanılacaktır. Lion, bulunan /usr(değil /usr/local) libxml2.2.7.3'ü kullanır .

Diğer birçok yerde de belirtildiği gibi, uyarılar göz ardı edilebilir. Benim gibi uyarı sizi çıldırtıyorsa, bunu yapabilirsiniz:

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

İlginç bir şekilde, nokogiri -vkomut satırına yazarsanız, tam tersi bir uyarı alırsınız:

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

Bu, libxml2'nin nasıl yüklendiğine dair daha fazla bilgi olduğunu gösterir; Ruby ve Rails, sistem yüklü libxml2'yi ve komut satırını ortam yolundan libxml2'yi kullanarak kullanır. Her neyse, bu benim için hatayı susturur.

Tekrar söyleyeceğim - bu sadece Lion için. Önceki düzeltme Snow Leopard için çalışacak.

Bu cevabın sonu. Burada okumayı bırak.


Tamam, okumayı bırakmadın ... şey ...

TAVSİYE EDİLMEZ!!!!!!

Uyarıldın. Mac OSX'in, içinde bulunan libxml2'yi devre dışı bırakarak, önyüklemesine libxml2 kitaplığını yüklediğini doğrulayabilirsiniz /usr/lib. Tüm sürümlerini libxml2*.dylibto kopyalamak gibi bir şey yapın libxml2*.dylib.old(benim makinemde bu libxml2.2.7.3, libxml2.2ve idi libxml2).

Bunu yaptıktan sonra, Nokogiri'yi çalıştırmak herhangi bir hata üretmeyecektir. O yüklü libxml2 bulamıyorum ve şimdi sonunda bulgu, çevre yolu takip edecek olmasıdır libxml2.2.7.8içinde /opt/local.

ANCAK eski libxml dosyalarını geri kopyalayamazsınız. Bunun nedeni, işletim sisteminin önyüklemede yüklenen libxml2'ye ihtiyaç duymasıdır.

Gücü kapatıp tekrar açmak makinenizi tutacaktır. Giriş ekranı askıda kalacak ve takılacak. Güç kapalı ve güç tek kullanıcı modunda yeniden (beklemeye Command- Syeniden iken). Önyükleme oluşumunu izleyebilirsiniz. Düşük ve işte, libxml2'yi yükleyemediği bir hata atıyor ve sonra çalışmayı durduruyor.

Gücü kapatın ve tekrar açın. Bu sefer kurtarma moduna önyükleme yapın (basılı tutun Command- Rveya tutun Optionve ardından kurtarma diskini seçin). Kurtarma modunda terminali ( utilities/terminal) açın. HD'nize /usr/libbağlayın (deneyin /Volumes/Macintosh\ HD/usr/lib) ve libxml2 dosyalarını geri kopyalayın. Yeniden başlatın ve her şey yoluna girecek.


1
heh ... derleme seçeneklerini / usr ve / opt / local (MacPorts) arasında bölme talimatlarınız bunu benim için yaptı ... teşekkürler
Phillip Koebbe

Benden daha zeki birinin de Apple Bootstrap libxml2 kabusuyla ters düştüğünü görmek güzel :)
Kenton

Bu gönderiye rastgele rastladım ve hiç kullanmadım, ancak bu ayrıntılı cevap çaba için birçok olumlu oyu hak ediyor!
starscream_disco_party

2
Bu çözümde bir varyasyon kullandım (burada dinamik olarak yüklenen bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
sürümüm 2.9.0'dı

Güncellenen ipucu için @sberkley'e teşekkürler. Bunu çalıştırdığımda fark ettim ki, eğer bunu yaparsanız ~, bu değeri küresel olarak ayarlıyor gibi görünüyor. Yani belki bunu bir kez yapabilir ve bir daha asla endişelenmenize gerek kalmaz.
duma

97

Nokogiri'yi ile kurduysanız, gem'in C uzantısını yeniden derlemek için gem install nokogiriçalıştırarak bu uyarıyı çözebilirsiniz gem pristine nokogiri.

Nokogiri'yi ile kurduysanız bundle install, bu uyarıyı, bundle exec gem pristine nokogiriBundler'ın yüklediği her yerde gem'in C uzantısını yeniden derlemek için çalıştırarak çözebilirsiniz .


5
Mükemmel teşekkür ederim. bundle exec gem pristine nokogiribaşarmak.
toxaq

1
Ubuntu 12.04'te 2.7.8'i dinamik olarak yükleyerek 2.8.0'a karşı oluşturulma uyarısıyla mükemmel bir şekilde çalıştı
richard

Lion and rails 3.2.16'da uzaklaşma uyarısını almak için hem 'bundle exec gem pristine nokogiri' yapmak zorunda kaldım hem de 'gem
nokogiri'yi

1
Bu benim için OS X Mavericks'te çalıştı, cevap kabul etmedi.
CBanga

Bu, son derece ayrıntılı ve kafa karıştırıcı olmak bir yana, makinenizi tuğlayabilecek bir şey değil, kabul edilen yanıt olmalıdır.
Greg Blass

58

Eğer homebrew ve bundler kullanıyorsanız Bunu düzeltmek için, eklemek gem 'nokogiri' üstüne aramalarınızdan Gemfile, daha sonra bu komutları çalıştırın:

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

Paketleyici kullanmıyorsanız, bunun yerine şu komutları çalıştırın:

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/

Uygulamanızda, hangi kitaplığın yükleneceğini belirleyemeyen mücevherler tarafından yüklenen eski libxml2 sistem sürümü yerine dinamik libxml2 kitaplığını yüklemeye zorlamak için öncelikle nokogiri'ye ihtiyaç duymalısınız .


linkVe unlinkkomutlarının gerekli olduğunu sanmıyorum . Onları kullanmadan kurtulabildim.
M. Scott Ford

gemkomutların başına eklemeniz gerekebileceğini unutmayın bundle exec- örneğin kullanıyorsanız rbenv.
asimetrik

4
Dahil etmemek için herhangi bir sebep var mı brew uninstall libxslt?
Nate Berkopec

5
Bu yanıtı kopyalayıp yapıştıranlar için, libxml2'nin en son sürümü 2.9.0'dır - kopyalayıp yapıştırırken bunu düzenlediğinizden emin olun!
Nate Berkopec

7
Son cümlenin önemli olduğunun altını çizmek gerekir : önce nokogiri gerektirir Bunu, nokogiri'yi Gemfile'nize rayların önüne koyarak yapın.
Wolfram Arnold

28

Bunların hiçbiri benim için işe yaramadı.

Libxml2'yi daha sonraki bir sürümde (2.7.8) brew ile kurdum. Bu, nokogiri'nin kendisine ve sonraki sorunlara karşı derlenmesine neden oldu. Çözüm, kaldırın, ardından inşa edin, ardından isterseniz kurun.

İşte ne işe yaradı:

  • brew uninstall libxml2 (önceden kurulmuşsa)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (isteğe bağlı)

3
Bu benim için OS X 10.8.2'de libxml 2.7.8 / 2.8.0 ile düzeltildi. Sadece nokogiri mücevherini kaldırmak ve yeniden yüklemek onu çözmedi, ama brew uninstall libxml2önceden çözdü . Teşekkürler!
stereoscott

1
homebrew kullanıyorsanız mükemmel cevap
awenkhh

+1 Mükemmel. Anahtar nokta, nokogiri'yi kurduğunuzda libxml2'nin başka bir sürümünün kurulu OLMAMASIDIR.
Nate Cook

Ayrıca, herhangi birinin RubyMine olması durumunda, RubyMine bundle installiçinde aldığım hatayı düzeltmeme yardımcı olduğum şey buydu. Aynı hatayı komut satırında da görebilirsinizrake --tasks
Nate Cook

Bu benim için doğru çözümdü. Mountain Lion'ı çalıştırıyorum ve homebrew (ve Intellij IDEA) kullanıyorum.
duma

16

Mountain Lion'a güncelleme yaptıktan sonraki çözüm (benim için) çok daha basitti:

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

4
Geri bildirim için teşekkürler, Old Pro. SO Ayrıcalıkları Soru-Cevap bölümünü yeniden okumayı düşünmenizi tavsiye ederim. "Olumsuz derecede özensiz, çaba harcanmamış bir gönderi veya açık ve belki de tehlikeli şekilde yanlış bir yanıtla karşılaştığınızda olumsuz oylarınızı kullanın. Bu cevap OP dahil birçok kişi için açıkça işe yaradı, bu yüzden olumsuz bir oy vereceğini düşünmüyorum.
IAmNaN

1
Yakın zamanda keşfedilen cpu tüketimi DOS güvenlik açığı nedeniyle ( vuxml.org/freebsd/843a4641-9816-11e2-9c51-080027019be0.html ) FreeBSD üzerinde libxml2'yi güncelledik ve söz konusu nokogiri uyarısına neden olduk . Açıklandığı gibi yeniden yükleme sorunu çözdü.
user569825

OSX 10.8.5'te benim için çalıştı
steakchaser

1
Hayır, @Tass. update sadece gem'in yeni bir sürümü olup olmadığını kontrol eder, bu durumda bu yoktur. İki yıldan fazla bir zaman oldu ama kaldırmayı çalıştırmadan hatırlıyorum, güncelleme bir NOP idi. Nokogiri sürümünün değişmediğinden şüpheleniyorum, ancak işletim sistemini yükselttikten sonra kitaplıkların farklı başlıklarla derlenmesi gerektiğinden şüpheleniyorum. Bu arada, bu yöntem, şimdi birkaç OSX güncellemesinden sonra işe yaradı.
IAmNaN

9

Yukarıdaki patrickmcgraw'dan gelen yoruma göre, sadece nokogiri'yi Gemfile'ıma ilk girdi olarak koymak benim için çalıştı. Bunu ayrı bir cevap olarak koyuyorum çünkü orijinal yorum gömüldü.

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

1
Bunun neden işe yaradığına dair bir açıklama için, bu yanıta bakın @Jarrett
Jared Beck

Evet! 'UYARI: Nokogiri, LibXML 2.8.0 sürümüne karşı geliştirildi, ancak dinamik olarak
2.7.8'e

4

Bundler, varsayılan derleme konumlarını ayarlama seçeneklerine sahiptir. Örneğin, libxml2 macports aracılığıyla kurulduğunda:

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

Bunu yaptıktan sonra bundle installuyarı gitti.

Ayrıca nokogiri wiki'de derleme seçeneklerini ayarlamak için bazı yararlı örnekler de var .


4

Gem'i kurduktan sonra sistem kitaplıklarınızı güncellediğinize benziyor, bu nedenle Nokogiri'yi güncellemeniz gerekiyor. Mevcut kitaplık sürümünü kullanmak için:

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

2

Benzer bir sorun yaşadım ve şu şekilde çözdüm:

Benim durumumda, RVM kurulu ve @global ve @project mücevher setlerim vardı. Her ikisinde de nokogiri kurulu ve biri farklı libxml ile inşa edilmişti.

İkisini de yeniden inşa etmek (bunu yapmak için nedenim var) sorunu çözdü.

Bu yardımcı olur umarım..


1
gem uninstall nokogiri
bundle  #install nokogiri again

Bu, "libxml2 eksik" ile başarısız olursa. ve "/usr/bin/gcc-4.2 ..." kullanmaya çalışan taşlar / nokogiri-1.5.0 / ext / nokogiri / mkmf.log görüyorsunuz, o zaman /usr/bin/gcc-4.2 eksik

Çözüm:

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

Önce:

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

Sonra:

$ 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

Gerçekten libxml2 libxslt'i kaçırıyorsanız, o zaman

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

Bilginize: Brew ve bundler ile Mountain Lion çalıştırıyorum.



0

Aslında biri kaynaktan, biri RPM'den olmak üzere 2 libxml sürümü yükledim.

Aşağıdaki tam çözümüm

Kaynağı kaldırdım (kaynak dizinden)

sudo make uninstall

Grupları kaldır

rm -rf ~/.bundle ~/.bundler

Güncellenen LD (bunu sudo değil, kök olarak yapmanız gerekebilir)

sudo ldconfig

Ardından paketi yeniden yükleyin

bundle install

0

Bununla kendim karşılaştım (OS X Lion 10.7.5). Tam mesajım şuydu: Nokogiri, LibXML 2.8.0 sürümüne göre oluşturuldu, ancak dinamik olarak 2.7.3 yüklendi.

Burada bahsedilen birkaç öneriyi denedim, hiçbiri işe yaramadı, ancak bu işe yaradı:

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

Açıklama şöyledir: "Bunun nedeni, libxml2 Nokogiri'nin hangi libxml2 Nokogiri'ye karşı oluşturulduğuna bakılmaksızın, Lion sistemi varsayılan libxml2 (önyükleme sırasında yüklenir) kullanılmasıdır.

Krediler: https://coderwall.com/p/o5ewia


0

İşletim Sistemi: Maverick 10.9.3

Yakut 1.9.3

UYARI: Nokogiri, LibXML 2.9.1 sürümüne göre oluşturuldu, ancak dinamik olarak 2.9.0 yüklendi.

Çözümüm:

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"

Umarım bu yardım eder


0

Bu iletiye sahipseniz ve nokogiriniz gem kaynağında bulunan sürümle güncel değilse bundle update nokogiri, yeni kodu almak ve yeniden derlemek için çalıştırın . Hatanız ortadan kalkmalı.


0

İşletim Sistemi: Catalina

Uyarı: uyarı nokogiri, libxml 2.9.10 sürümüne göre oluşturuldu, ancak 2.9.4 dinamik olarak yüklendi

Michiel de Mare adımlarını izledim , ancak brew libxml2 --with-xml2-config yükleme işlemi geçersiz seçenek hatasıyla başarısız oldu. Bu yüzden libxml2 ve libxslt'yi kurdum ve her iki komutun çıktılarını da not aldım.

 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

Ve nokogiri için bundle'ı yapılandırırken bu dizinleri kullandım

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

Özetlemek gerekirse bu adımları uyguladım

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.