Instalacja Nokogiri nie powiodła się - brakuje -libxml2

156

Zawsze omijałem problemy z instalacją Nokogiri, postępując zgodnie z dokumentacją w samouczku „ Instalowanie Nokogiri ”.

Ale tym razem, nawet po zainstalowaniu wszystkich zależności, Nokogiri nie zostało zainstalowane. Otrzymuję następujący błąd:

libxml2 is missing.  please visit <http://nokogiri.org/tutorials/installing_nokogiri.html>

Próbowałem go zainstalować, określając katalogi libxml2 i libxslt:

sudo gem install nokogiri -- --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-dir=/usr/

ale zwrócił ten sam błąd.

Śledziłem wszystkie inne powiązane artykuły Stack Overflow i żaden nie pomógł. Czy ktoś ma rozwiązanie?

Rohit A.
źródło
1
Jaki jest Twój system operacyjny?
Jake Jones,
2
Jest to tym bardziej apt answer- sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra

Odpowiedzi:

163

Najpierw zainstaluj zależności:

sudo apt-get install libxslt-dev libxml2-dev

Jeśli nadal pojawia się błąd, być może brakuje łańcucha narzędzi kompilatora:

sudo apt-get install build-essential

Jeśli brakuje zestawu narzędzi do kompilacji, pojawi się błąd „brakuje libxml2” (przynajmniej natknąłem się na ten problem w Debianie Lenny).

Nokogiri build testuje-kompiluje plik nagłówkowy libxml2, aby sprawdzić, czy jest obecny, jednak nie rozróżnia między „brakiem libxml2” a „brakiem kompilatora do testowania libxml2”.

Erik Peterson
źródło
44
Jeśli to nie jest problem, może być konieczne zainstalowanie libxml2-dev
Erik Peterson
1
Uruchomiłem powyższe polecenie i otrzymałem błąd „Brak libxml2”. czy możesz mi powiedzieć więcej o instalacji łańcucha narzędzi do budowania. b'cos, nie znalazłem w tym wiele pomocy.
Rohit A.
1
Otrzymałem tę wiadomość, ponieważ nie miałem zainstalowanego gcc (ani żadnego innego kompilatora). Nie miałem zestawu narzędzi kompilatora.
Erik Peterson
7
Jeśli używasz komputera Mac: brew install libxslt, a następnie brew install libxml2
Sam Backus
245

W rzeczywistości może być konieczne zainstalowanie obu tych pakietów

sudo apt-get install libxslt-dev libxml2-dev
Ryan
źródło
7
W jaki sposób komentarz może być wysoko oceniany poniżej zaakceptowanej odpowiedzi?
Nowa Aleksandria
3
Ponieważ pytanie brzmiało „nawet po zainstalowaniu wszystkich zależności”. Tak więc przyjęta odpowiedź jest poprawna.
b0fh
62

W systemie Mac OS X (Mavericks) instalacja bibliotek brewi ustawienie NOKOGIRI_USE_SYSTEM_LIBRARIES=1przed instalacją klejnotu załatwiło sprawę.

Zreasumowanie:

  • Jeśli wcześniej był zainstalowany, odinstaluj klejnot:

    gem uninstall nokogiri
  • Użyj Homebrew zainstalować libxml2, libxslti libiconv:

    brew install libxml2 libxslt libiconv
  • Zainstaluj klejnot, określając ścieżki do bibliotek, z którymi mają być połączone:

    NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"
Eduardo
źródło
Otrzymałem kilka błędów dotyczących libiconv: „Apple dystrybuuje libiconv z OS X, możesz go znaleźć w / usr / lib”. Ale po prostu skopiowanie twojego skryptu instalacyjnego klejnotu zadziałało :) Dzięki!
Automatico
Dziękuję Ci! po całym poranku próbując zainstalować nokogiri, twoja odpowiedź (szczególnie ze ścieżkami konfiguracyjnymi) w końcu zadziałała - zamiast stwierdzenia (raczej nieprzydatnego), że libxml2 nie istnieje, nawet jeśli ścieżki były poprawne.
Pebbl
2
Korzystanie z portu zamiast naparu na OS X i po prostu się $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogirinie załatwi
Andres Kutt
2
W OSX El Capitan 10.11.2 musiałem go używać brew install libxml2 libxslt homebrew/dupes/libiconvdo pracy
Hai Feng Kao
2
Poza tym muszę dodać --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"aby gem install nokogirikomenda działała. W przeciwnym razie pokaże się libxml2 version 2.6.21 or later is required!(moja wersja libxml2 to 2.9.2)
Hai Feng Kao
22

Właśnie miałem ten sam problem w Fedorze 13. Po frustrującym i nieudanym wyszukiwaniu

gem install nokogiri

działa dla mnie, udało mi się go zainstalować i obejść błąd libxml2 za pośrednictwem yum.

Po prostu zainstaluj klejnot za pomocą yumzamiast gempolecenia:

su
yum search rubygem-nokogiri   #this find the proper package name
yum install rubygem-nokogiri.i686

Pomogło mi to znaleźć właściwą odpowiedź dla Fedory, a ponieważ używam RVM do zarządzania pakietami Ruby,

yum install rubygem-nokogiri

wciągnie wszystkie klejnoty i zależności Ruby do systemu, a nie do mojego środowiska RVM, az mojego doświadczenia wynika, że ​​jest to bardzo frustrujące i upokarzające doświadczenie.

Tak więc, biorąc swoje znalezisko klejnotu mniam Nokogiri, którego możesz użyć:

yum provides  rubygem-nokogiri

i uzyskaj listę zależności dla rubygem-Nokogiri, która pokazała mi brakujące biblioteki. Potem pobiegłem:

yum install libxml2-devel libxslt libxslt-devel

Teraz Nokogiri kompiluje się w Fedorze, a Nokogiri instaluje się. D'oh !, potrzebujemy nagłówków, aby skompilować Nokogiri z bibliotek deweloperskich.

Sojoodi
źródło
Zrobiło to dla mnie, chociaż w ubuntu musiałem użyć apt-get install libnokogiri-ruby1.9.1 , a następnie edytować plik Gemfile, aby poprosić o nokogiri 1.5.5 zamiast 1.5.9
ffflabs
13

W systemie Mac OS X (Mavericks), jeśli żadne z tych rozwiązań nie działa, wypróbuj:

ARCHFLAGS="-arch x86_64" gem install nokogiri

lub

ARCHFLAGS="-arch i386" gem install nokogiri

w zależności od architektury systemu.

rilla
źródło
13

Zwykle potrzebujesz plików programistycznych do tworzenia klejnotów. Próbować:

sudo apt-get install libxslt-dev libxml2-dev

(Właśnie zobaczyłem, że Eric zasugerował to samo w komentarzu.)

pduersteler
źródło
11

Udało mi się to zainstalować z Chocolatey , Windows 8.1 x64 i DevKit x64.

cinst libxml2
cinst libxslt
cinst libiconv

gem install nokogiri -- 
  --with-xml2-include=C:\Chocolatey\lib\libxml2.2.7.8.7\build\native\include 
  --with-xml2-lib=C:\Chocolatey\lib\libxml2.redist.2.7.8.7\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-iconv-include=C:\Chocolatey\lib\libiconv.1.14.0.11\build\native\include 
  --with-iconv-lib=C:\Chocolatey\lib\libiconv.redist.1.14.0.11\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-xslt-include=C:\Chocolatey\lib\libxslt.1.1.28.0\build\native\include 
  --with-xslt-lib=C:\Chocolatey\lib\libxslt.redist.1.1.28.0\build\native\bin\v110\x64\Release\dynamic

Musisz sprawdzić, czy numer wersji w ścieżkach jest poprawny.

Może być konieczne dodanie repozytorium NuGet firmy Microsoft:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"
Chloe
źródło
Otrzymuję komunikat „Nie można znaleźć pakietu libxml2”. Jakie źródła masz w Chocolately?
Isaac Waller,
3
Znalazłem problem! Źródła Nuget zostały wyłączone w pliku źródłowym Chocolatey! Ale klejnot nie działa: [tid-1789500] 126: Nie można znaleźć określonego modułu. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric
@RatkoStibric Myślę, że trzeba budować z bibliotekami dynamicznymi: ...\x64\Release\dynamic\cdecl.
Chloe,
1
Po zainstalowaniu czekolady dodaj źródło za pomocą następującego polecenia:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck
1
Dzięki za Chocolatey, nigdy wcześniej o tym nie wiedziałem!
Richard Peck
11

To będzie:

sudo yum install -y libxml2 libxml2-devel

na serwerach RHEL.

Hohner
źródło
6

W systemie MacOS żadne z powyższych / poniżej nie działało tak naprawdę dla mnie, dopóki wyraźnie nie podałem ścieżki XCode libxml2 do --with-xml2-include.

gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2 --use-system-libraries
sobstel
źródło
4

Udało mi się zainstalować Nokogiri 1.6.5 na Fedorze 20, wykonując:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Następnie bieganie:

gem install nokogiri
Simone
źródło
4

Dla każdego, kto ma ten problem, rozwiązałem go, uruchamiając to polecenie w katalogu projektu

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

Aktualizacja: ponownie wpadłem na to i próbowałem zaktualizować klejnot, który działał dla mnie ...

gem update nokogiri

Jbur43
źródło
2

Czy próbowałeś zainstalować libxml2? Nie z rubygemów, ale poprzez standardowy proces instalacji dla twojego systemu operacyjnego. Na przykład w systemie Ubuntu / Debian:

sudo apt-get install libxml2

W każdej najnowszej wersji OS X powinien być już zainstalowany.

d11wtq
źródło
Jestem na ubuntu i wykonałem wszystkie powyższe instalacje, jak powiedziano w innych pytaniach dotyczących przepełnienia stosu.
Rohit A.
1

Dla użytkowników OSX, jeśli wcześniej pomyślnie zainstalowałeś Nokogiri, ale pojawiają się błędy podczas instalacji, powiedzmy, przy użyciu nowej wersji Ruby, którą dodałeś i ten błąd, który zawiera komunikat taki jak:

The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.

Może to wskazywać na aktualizację XCode, która nastąpiła za pośrednictwem App Store, ręcznie lub automatycznie, i nie otwierałeś go od tego czasu.

Jeśli tak, powinieneś móc otworzyć XCode, wyrazić zgodę na nową licencję, a następnie pomyślnie zainstalować Nokogiri.

Paul Fioravanti
źródło
1

W systemie Mac OS X Yosemite mój błąd polegał na tym, że próbowałem użyć sudo gem installogólnej zasady, aby nie używać uprawnień superużytkownika podczas instalowania klejnotów.

W moim przypadku próbował zmodyfikować systemową instalację Rubiego, a to nie jest dobry pomysł. Zainstalowałem rbenv, zainstalowałem Ruby 2.2.2 przez niego i ustawiłem jako global, co jest terminem z dokumentacji rbenv. Po tym Nokogiri można było zainstalować za pomocą prostego

gem install nokogiri

Żadne hacki ani obejścia nie były konieczne, wystarczyło odpowiednio ustawić środowisko; Nokogiri robi resztę doskonale.

Aleks N.
źródło
Używanie sudojest OK, JEŚLI rozumiesz, jak to działa, gdzie odniesie skutek, dlaczego instalowane lub aktualizowane pliki powinny zostać zainstalowane i jak cofnąć akcję, jeśli się nie powiedzie. W przeciwnym razie użycie piaskownicy, takiej jak rbenv lub RVM, jest NAPRAWDĘ dobrym pomysłem.
Tin Man
1

Udało mi się zainstalować vagrant-awe, wykonując powyższy post, ale używając następującego polecenia:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
Romi
źródło
0

Udało mi się zainstalować Nokogiri, uruchamiając następujące pakiety:

$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch
user1455180
źródło
0

=== TLDR ===

Zgodnie z instrukcją , zbuduj Rubiego za pomocą najnowszego kompilatora clang lub przynajmniej tej samej wersji, której Rubygems użyje do skompilowania natywnych rozszerzeń Nokogiri libxml i libxsl.

Jeśli używasz RVM, budowanie ze źródła z --with-ggc=clangflagą było tym, co zrobiło dla mnie:

rvm install 2.2 --with-gcc=clang

Zastąp 2.2dowolną wersją. --with-gcc=clangzapewnia, że ​​RVM buduje się ze źródła i używa do tego clang; w przeciwnym razie RVM może mieć wbudowany plik binarny Ruby, co mnie zaskoczyło.

Następnie zainstaluj Nokogiri normalnie za pomocą Bundlera lub Rubygems.

=== W GŁĘBOKOŚCI ===

Przez chwilę walczyłem z tym. gem install nokogiridałeś mi:

checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no

Zagłębiając się mkmf.log, zobaczyłem:

conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }  

Nokogiri dostarcza własne biblioteki libxml i libxsl (od 1.6.4). Podpis zdefiniowany w lokalnej kopii parser.h Nokogiri (znajdującej się w katalogu instalacyjnym gem) to:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Nie mogłem więc zrozumieć, w jaki sposób wywołanie metody w hermetycznie zamkniętym pliku conftest.c nie może się równać z plikiem nagłówkowym parser.h.

Kiedy zdałem sobie sprawę, że prawdopodobnie zainstalowałem binarny Ruby, usunąłem i ponownie zainstalowałem za pomocą --with-gcc=clang(aby wymusić kompilację i użyć clang) i problem został rozwiązany:

rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri

Nie jestem dokładnie pewien, dlaczego to działa, ponieważ nagłówek systemowy libxml /usr/include/libxml2/libxml/parser.hma taką samą sygnaturę jak lokalna kopia Nokogiri.

To dziwne, ale zadziałało. Tylko upewnij się, że skompilowałeś Ruby z clang.

Johnster
źródło
0
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib

Zmień za jego pomocą swoją wersję.

Liber
źródło