Cài đặt Nokogiri không thành công -libxml2 bị thiếu


156

Tôi luôn tìm cách khắc phục các sự cố cài đặt Nokogiri bằng cách làm theo tài liệu trong hướng dẫn " Cài đặt Nokogiri ".

Nhưng lần này, ngay cả sau khi cài đặt tất cả các phụ thuộc, Nokogiri vẫn chưa được cài đặt. Tôi nhận được lỗi sau đây:

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

Tôi đã thử cài đặt nó bằng cách chỉ định thư mục libxml2 và libxslt:

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

nhưng nó trả về cùng một lỗi.

Tôi đã theo dõi tất cả các bài viết Stack Overflow liên quan khác và không có gì giúp được. Có ai có giải pháp không?


1
Hệ điều hành của bạn là gì?
Jake Jones

2
Đây là câu trả lời thích hợp hơn - sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra 16/07/13

Câu trả lời:


163

Đầu tiên, cài đặt các phụ thuộc:

sudo apt-get install libxslt-dev libxml2-dev

Nếu bạn vẫn nhận được lỗi, bạn có thể đang thiếu một công cụ biên dịch:

sudo apt-get install build-essential

Bạn sẽ gặp lỗi "libxml2 bị thiếu" nếu bạn thiếu một chuỗi công cụ xây dựng (ít nhất là tôi đã gặp phải vấn đề này trên Debian Lenny).

Bản thử nghiệm xây dựng Nokogiri biên dịch tệp tiêu đề libxml2 để xác minh rằng nó hiện diện, tuy nhiên, nó không phân biệt giữa "libxml2 bị thiếu" và "trình biên dịch để kiểm tra libxml2 bị thiếu".


44
Nếu đó không phải là vấn đề, bạn có thể cần cài đặt libxml2-dev
Erik Peterson

1
tôi đã chạy lệnh trên và nhận được lỗi 'libxml2 bị thiếu'. bạn có thể cho tôi biết thêm về việc cài đặt chuỗi công cụ xây dựng. B'cos tôi đã không tìm thấy nhiều sự giúp đỡ về nó.
Rohit A.

1
Tôi nhận được thông báo đó vì tôi chưa cài đặt gcc (hoặc bất kỳ trình biên dịch nào khác). Tôi đã không có một công cụ biên dịch.
Erik Peterson

7
Nếu bạn đang dùng mac: brew cài đặt libxslt thì hãy cài đặt libxml2
Sam Backus

245

Bạn thực sự có thể cần phải cài đặt cả hai gói này

sudo apt-get install libxslt-dev libxml2-dev

7
Làm thế nào một bình luận có thể đánh giá cao này ngồi dưới câu trả lời được chấp nhận?
Alexandria mới

3
Bởi vì câu hỏi nêu "ngay cả sau khi cài đặt tất cả các phụ thuộc". Vì vậy, câu trả lời được chấp nhận là câu trả lời đúng.
b0fh

62

Trong Mac OS X (Mavericks), cài đặt các thư viện brewvà cài đặt NOKOGIRI_USE_SYSTEM_LIBRARIES=1trước khi cài đặt đá quý đã giúp tôi rất nhiều.

Tóm tắt:

  • Nếu được cài đặt trước đó, gỡ cài đặt đá quý:

    gem uninstall nokogiri
  • Sử dụng Homebrew để cài đặt libxml2, libxsltlibiconv:

    brew install libxml2 libxslt libiconv
  • Cài đặt đá quý chỉ định đường dẫn đến các thư viện sẽ được liên kết với:

    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"

Tôi đã gặp một số lỗi về libiconv: "Apple phân phối libiconv với OS X, bạn có thể tìm thấy nó trong / usr / lib." Nhưng chỉ cần sao chép tập lệnh cài đặt đá quý của bạn đã làm việc :) Cảm ơn!
Automatico

Cảm ơn bạn! sau cả buổi sáng cố gắng cài đặt nokogiri, câu trả lời của bạn (cụ thể là với các đường dẫn cấu hình) cuối cùng cũng hoạt động - thay vì cài đặt (nói một cách vô ích) rằng libxml2 không tồn tại, ngay cả khi các đường dẫn là chính xác.
Pebbl

2
Sử dụng cổng thay vì pha trên OS X và $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogirithực hiện thủ thuật
Andres Kütt

2
Trong OSX El Capitan 10.11.2, tôi đã sử dụng brew install libxml2 libxslt homebrew/dupes/libiconvnó để hoạt động
Hai Feng Kao

2
Bên cạnh đó, tôi cần phải thêm --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"cho gem install nokogirilệnh để làm việc. Mặt khác, nó sẽ hiển thị libxml2 version 2.6.21 or later is required!(phiên bản libxml2 của tôi là 2.9.2)
Hai Feng Kao

22

Tôi chỉ gặp vấn đề tương tự trên Fedora 13. Sau một cuộc tìm kiếm bực bội và không thành công để thực hiện

gem install nokogiri

làm việc cho tôi, tôi đã có thể cài đặt nó và khắc phục lỗi libxml2 thông qua yum.

Đơn giản chỉ cần cài đặt gem thông qua yumthay vì gemlệnh:

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

Điều này giúp tôi tìm ra câu trả lời đúng cho Fedora và, khi tôi đang sử dụng RVM để quản lý gói Ruby,

yum install rubygem-nokogiri

sẽ kéo tất cả các viên ngọc và phụ thuộc của Ruby vào hệ thống, chứ không phải vào môi trường RVM của tôi và theo kinh nghiệm của tôi dẫn đến một trải nghiệm rất bực bội và khiêm nhường.

Vì vậy, hãy tìm kiếm viên ngọc Nokogiri yum bạn có thể sử dụng:

yum provides  rubygem-nokogiri

và nhận được một danh sách các phụ thuộc cho rubygem-Nokogiri cho tôi thấy các thư viện bị thiếu. Sau đó tôi chạy:

yum install libxml2-devel libxslt libxslt-devel

Bây giờ Nokogiri biên dịch trong Fedora và Nokogiri cài đặt. Chúng ta cần các tiêu đề để biên dịch Nokogiri từ các thư viện phát.


Điều này đã làm điều đó cho tôi, mặc dù trong Ubuntu tôi đã phải sử dụng apt-get install libnokogiri-ruby1.9.1 , sau đó chỉnh sửa Gemfile để yêu cầu nokogiri 1.5.5 thay vì 1.5.9
ffflabs vào

13

Trong Mac OS X (Mavericks) nếu không có giải pháp nào trong số này hoạt động, hãy thử:

ARCHFLAGS="-arch x86_64" gem install nokogiri

hoặc là

ARCHFLAGS="-arch i386" gem install nokogiri

tùy thuộc vào kiến ​​trúc hệ thống của bạn.


13

Bạn thường cần các tập tin phát triển để xây dựng đá quý. Thử:

sudo apt-get install libxslt-dev libxml2-dev

(Tôi chỉ thấy rằng Eric đề nghị tương tự trong một bình luận.)


11

Tôi đã có thể cài đặt cái này với Chocolatey , Windows 8.1 x64 và 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

Bạn sẽ phải xác minh số phiên bản trong đường dẫn là chính xác.

Bạn có thể cần thêm kho lưu trữ NuGet của Microsoft:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"

Tôi nhận được 'Không thể tìm thấy gói libxml2'. Những nguồn nào bạn có trong Sôcôla?
Isaac Waller

3
Tìm thấy vấn đề! Nguồn Nuget đã bị vô hiệu hóa trong tập tin nguồn của Chocolatey! Nhưng đá quý không hoạt động: [tid-1789500] 126: Không thể tìm thấy mô-đun được chỉ định. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric 24/03

@RatkoStibric Tôi nghĩ bạn phải xây dựng với các lib động : ...\x64\Release\dynamic\cdecl.
Chloe

1
Khi sô cô la được cài đặt, hãy thêm một nguồn bằng lệnh sau:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck

1
Cảm ơn Chocolatey, chưa bao giờ biết về điều đó trước đây!
Richard Peck

11

Nó sẽ là:

sudo yum install -y libxml2 libxml2-devel

trên các máy chủ của RHEL.


6

Tại macOS, không có cái nào ở trên / dưới đây thực sự có tác dụng với tôi cho đến khi tôi cung cấp rõ ràng đường dẫn libxml2 của XCode tới --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

4

Tôi đã có thể cài đặt Nokogiri 1.6.5 trên Fedora 20 bằng cách thực hiện:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Sau đó chạy:

gem install nokogiri

4

Đối với bất kỳ ai khác gặp phải vấn đề này, tôi đã giải quyết nó bằng cách chạy lệnh này trong thư mục dự án

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

Cập nhật: Tôi gặp phải vấn đề này một lần nữa và cố gắng cập nhật viên ngọc hoạt động cho tôi ...

gem update nokogiri


2

Bạn đã thử cài đặt libxml2 chưa? Không phải từ rubygems, mà thông qua quá trình cài đặt tiêu chuẩn cho hệ điều hành của bạn. Trên Ubuntu / Debian chẳng hạn:

sudo apt-get install libxml2

Trên mọi phiên bản OS X gần đây, nó đã được cài đặt.


Tôi đang sử dụng Ubuntu và tôi đã làm theo tất cả các cài đặt ở trên như được nói trong bất kỳ câu hỏi stackoverflow nào khác.
Rohit A.

1

Đối với người dùng OSX, nếu bạn đã cài đặt Nokogiri thành công trước đó, nhưng vẫn gặp lỗi khi cài đặt nó, giả sử, sử dụng phiên bản mới của Ruby mà bạn đã thêm lỗi đó bao gồm một thông báo như:

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

Đây có thể là dấu hiệu cho thấy việc nâng cấp XCode đã xảy ra thông qua App Store, theo cách thủ công hoặc tự động và bạn đã không mở nó kể từ thời điểm đó.

Nếu vậy, bạn sẽ có thể mở XCode, đồng ý với giấy phép mới và sau đó cài đặt Nokogiri thành công.


1

Trên Mac OS X Yosemite, lỗi của tôi là tôi đã thử sử dụng sudo gem install khi đó là quy tắc không sử dụng đặc quyền siêu người dùng khi cài đặt đá quý.

Trong trường hợp của tôi, nó đã cố gắng sửa đổi cài đặt hệ thống của Ruby và đó không phải là ý kiến ​​hay. Tôi đã cài đặt rbenv, cài đặt Ruby 2.2.2 thông qua nó và đặt nó globallà một thuật ngữ từ tài liệu của rbenv. Sau đó, Nokogiri có thể tự cài đặt đơn giản

gem install nokogiri

Không có hack hoặc cách giải quyết là cần thiết, chỉ cần một môi trường được thiết lập đúng; Nokogiri làm phần còn lại hoàn hảo.


Sử dụng sudolà OK NẾU bạn hiểu cách thức hoạt động của nó, nơi nó sẽ có hiệu lực, tại sao các tệp đang được cài đặt hoặc cập nhật nên được cài đặt và làm thế nào để hoàn tác hành động nếu thất bại. Mặt khác, sử dụng hộp cát như rbenv hoặc RVM là một ý tưởng thực sự tốt.
Tin Man

1

Đã có thể cài đặt vagrant-awe bằng cách làm theo bài viết trên nhưng sử dụng lệnh như sau:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws


0

Tôi đã có thể cài đặt Nokogiri bằng cách chạy các gói sau:

$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch

0

=== TLDR ===

Như trạng thái hướng dẫn , xây dựng Ruby với trình biên dịch clang mới nhất hoặc ít nhất là cùng một phiên bản mà Rubygems sẽ sử dụng để biên dịch các phần mở rộng riêng của Nokogiri libxml và libxsl.

Nếu sử dụng RVM, xây dựng từ nguồn với --with-ggc=clangcờ là điều đã làm cho tôi:

rvm install 2.2 --with-gcc=clang

Thay thế 2.2bằng bất cứ phiên bản nào bạn muốn. --with-gcc=clangđảm bảo RVM xây dựng từ nguồn và sử dụng tiếng kêu để làm như vậy; mặt khác, RVM có thể là một Ruby nhị phân được xây dựng sẵn, đó là thứ đã làm tôi vấp ngã.

Sau đó, cài đặt Nokogiri như bình thường bằng Bundler hoặc Rubygems.

=== TRONG KHO ===

Tôi vật lộn với điều này trong một thời gian. gem install nokogiriđưa cho tôi:

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

Đi sâu vào mkmf.logtôi đã thấy:

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

Nokogiri cung cấp libxml và libxsl của riêng mình (kể từ 1.6.4). Chữ ký được xác định trong bản sao phân tích cú pháp cục bộ của Nokogiri (được tìm thấy trong thư mục cài đặt đá quý) là:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Vì vậy, tôi đã không biết làm thế nào mà cách gọi phương thức trong cách sử dụng tệp conftest.c được niêm phong kín không thể khớp với tệp tiêu đề cho trình phân tích cú pháp.h.

Khi tôi nhận ra có lẽ tôi đã cài đặt một Ruby nhị phân, tôi đã gỡ bỏ và cài đặt lại bằng cách sử dụng --with-gcc=clang(để buộc biên dịch và sử dụng tiếng kêu) và vấn đề đã được giải quyết:

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

Tôi không chắc chắn tại sao điều đó hoạt động như tiêu đề libxml của hệ thống /usr/include/libxml2/libxml/parser.hcó cùng chữ ký với bản sao cục bộ của Nokogiri.

Thật kỳ lạ, nhưng nó đã làm việc. Chỉ cần chắc chắn rằng bạn biên dịch một Ruby với tiếng kêu.


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

Thay đổi phiên bản của bạn với nó.

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.