การติดตั้ง Nokogiri ล้มเหลว -libxml2 ขาดหายไป


156

ฉันพยายามแก้ไขปัญหาการติดตั้ง Nokogiri เสมอโดยทำตามเอกสารในบทแนะนำ" การติดตั้ง Nokogiri "

แต่คราวนี้แม้หลังจากติดตั้งการอ้างอิงทั้งหมดแล้ว Nokogiri ยังไม่ได้รับการติดตั้ง ฉันได้รับข้อผิดพลาดต่อไปนี้:

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

ฉันพยายามติดตั้งโดยระบุไดเรกทอรี libxml2 และ libxslt:

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

แต่มันกลับข้อผิดพลาดเดียวกัน

ฉันติดตามบทความ Stack Overflow อื่น ๆ ที่เกี่ยวข้องทั้งหมดและไม่มีใครช่วยเลย ไม่มีใครมีทางออกหรือไม่?


1
ระบบปฏิบัติการของคุณคืออะไร
Jake Jones

2
นี่เป็นคำตอบที่ฉลาดขึ้น apt-get install libxslt-dev libxml2-dev
Pratik Bothra

คำตอบ:


163

ก่อนติดตั้งการอ้างอิง:

sudo apt-get install libxslt-dev libxml2-dev

หากคุณยังคงได้รับข้อผิดพลาดคุณอาจขาดเครื่องมือคอมไพเลอร์:

sudo apt-get install build-essential

คุณจะได้รับข้อผิดพลาด "libxml2 is missing" หากคุณไม่มี toolchain สำหรับสร้าง (อย่างน้อยฉันก็พบปัญหานี้ใน Debian Lenny)

Nokogiri build test-compiles ไฟล์ส่วนหัว libxml2 เพื่อตรวจสอบว่ามันมีอยู่อย่างไรก็ตามมันไม่ได้แยกความแตกต่างระหว่าง "libxml2 is missing" และ "compiler เพื่อทดสอบ libxml2 หายไป"


44
หากที่ไม่ปัญหาที่คุณอาจต้องติดตั้ง libxml2-dev
เอริคปีเตอร์สัน

1
ฉันได้เรียกใช้คำสั่งข้างต้นและได้รับข้อผิดพลาด 'libxml2 is missing' คุณช่วยบอกฉันเพิ่มเติมเกี่ยวกับการติดตั้งโซ่เครื่องมือสร้างได้ไหม b'cos ฉันไม่ได้ช่วยอะไรมาก
Rohit A.

1
ฉันได้รับข้อความนั้นเพราะฉันไม่ได้ติดตั้ง gcc (หรือคอมไพเลอร์อื่น ๆ ) ฉันไม่มีเครื่องมือคอมไพเลอร์
Erik Peterson

7
หากคุณใช้ mac: ชงติดตั้ง libxslt จากนั้นชงติดตั้ง libxml2
Sam Backus

245

คุณอาจจำเป็นต้องติดตั้งแพ็กเกจทั้งสองนี้

sudo apt-get install libxslt-dev libxml2-dev

7
ความคิดเห็นจะให้คะแนนว่าสูงกว่าคำตอบที่ยอมรับได้อย่างไร
ซานเดรียใหม่

3
เพราะคำถามที่ระบุ "แม้หลังจากติดตั้งการอ้างอิงทั้งหมด" ดังนั้นคำตอบที่ยอมรับจึงเป็นคำตอบที่ถูกต้อง
b0fh

62

ใน Mac OS X (Mavericks) การติดตั้งไลบรารีด้วยbrewและการตั้งค่าNOKOGIRI_USE_SYSTEM_LIBRARIES=1ก่อนที่จะติดตั้ง gem ทำเคล็ดลับสำหรับฉัน

สรุป:

  • หากติดตั้งก่อนหน้านี้ถอนการติดตั้งอัญมณี:

    gem uninstall nokogiri
  • ใช้ในการติดตั้ง Homebrew libxml2, libxsltและlibiconv:

    brew install libxml2 libxslt libiconv
  • ติดตั้งอัญมณีที่ระบุพา ธ ไปยังไลบรารีที่จะเชื่อมโยงกับ:

    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"

ฉันพบข้อผิดพลาดบางอย่างเกี่ยวกับ libiconv: "Apple แจกจ่าย libiconv ด้วย OS X คุณสามารถค้นหาได้ใน / usr / lib" แต่เพียงแค่คัดลอกสคริปต์การติดตั้ง gem ของคุณทำงาน :) ขอบคุณ!
Automatico

ขอบคุณ! หลังจากตลอดทั้งเช้าพยายามติดตั้ง nokogiri คำตอบของคุณ (โดยเฉพาะกับพา ธ การกำหนดค่า) ในที่สุดก็ทำให้มันทำงานได้ - แทนที่จะติดตั้งที่ระบุ
Pebbl

2
การใช้พอร์ตแทนการชงใน OS X และ$ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiriทำตามเคล็ดลับ
Andres Kütt

2
ใน OSX El Capitan 10.11.2 ฉันต้องใช้brew install libxml2 libxslt homebrew/dupes/libiconvเพื่อทำงาน
Hai Feng Kao

2
นอกจากนี้ผมต้องเพิ่ม--with-xml2-include="/usr/local/opt/libxml2/include/libxml2"สำหรับgem install nokogiriคำสั่งในการทำงาน นอกเหนือจากนี้มันจะแสดงlibxml2 version 2.6.21 or later is required!(เวอร์ชัน libxml2 ของฉันคือ 2.9.2)
Hai Feng Kao

22

ฉันเพิ่งมีปัญหาเดียวกันกับ Fedora 13 หลังจากค้นหาที่ทำให้ผิดหวังและไม่สำเร็จ

gem install nokogiri

การทำงานสำหรับฉันฉันก็สามารถที่จะติดตั้งและรับรอบข้อผิดพลาด libxml2 yumผ่าน

เพียงติดตั้ง gem ผ่านyumแทนgemคำสั่ง:

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

สิ่งนี้ช่วยให้ฉันค้นหาคำตอบที่ถูกต้องสำหรับ Fedora และในขณะที่ฉันใช้การจัดการแพ็คเกจ RVM สำหรับ Ruby

yum install rubygem-nokogiri

จะดึงพลอย Ruby ทั้งหมดและการพึ่งพาเข้าสู่ระบบไม่ใช่ในสภาพแวดล้อม RVM ของฉันและในประสบการณ์ของฉันที่นำไปสู่ประสบการณ์ที่น่าผิดหวังและถ่อมตน

ดังนั้นคุณจะพบอัญมณี Nokogiri yum ที่คุณสามารถใช้ได้:

yum provides  rubygem-nokogiri

และรับรายการอ้างอิงสำหรับ rubygem-Nokogiri ซึ่งแสดงให้ฉันเห็นห้องสมุดที่ขาดหายไป หลังจากนั้นฉันก็วิ่ง:

yum install libxml2-devel libxslt libxslt-devel

ตอนนี้ Nokogiri รวบรวมใน Fedora และ Nokogiri ติดตั้งแล้ว เราต้องการหัวเพื่อรวบรวม Nokogiri จากห้องสมุด devel


สิ่งนี้ทำเพื่อฉันแม้ว่าใน Ubuntu ฉันต้องใช้apt-get install libnokogiri-ruby1.9.1จากนั้นแก้ไข Gemfile เพื่อขอ nokogiri 1.5.5 แทน 1.5.9
ffflabs

13

ใน Mac OS X (Mavericks) หากไม่มีวิธีแก้ไขปัญหาเหล่านี้ลอง:

ARCHFLAGS="-arch x86_64" gem install nokogiri

หรือ

ARCHFLAGS="-arch i386" gem install nokogiri

ขึ้นอยู่กับสถาปัตยกรรมของระบบของคุณ


13

โดยปกติคุณต้องการไฟล์พัฒนาสำหรับสร้างอัญมณี ลอง:

sudo apt-get install libxslt-dev libxml2-dev

(ฉันเพิ่งเห็นว่า Eric แนะนำเช่นเดียวกันในความคิดเห็น)


11

ฉันสามารถติดตั้งกับChocolatey , Windows 8.1 x64 และ 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

คุณจะต้องตรวจสอบหมายเลขเวอร์ชันในพา ธ ที่ถูกต้อง

คุณอาจต้องเพิ่มที่เก็บ NuGet ของ Microsoft:

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

ฉันได้รับ 'ไม่พบแพ็คเกจ libxml2' คุณมีแหล่งที่มาอะไรใน Chocolately
Isaac Waller

3
พบปัญหา! แหล่งข้อมูล Nuget ถูกปิดใช้งานในไฟล์ซอร์สของ Chocolatey! แต่อัญมณีไม่ทำงาน: [tid-1789500] 126: ไม่พบโมดูลที่ระบุ - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric

@RatkoStibric ผมคิดว่าคุณต้องสร้างด้วย libs ...\x64\Release\dynamic\cdeclแบบไดนามิก:
Chloe

1
เมื่อติดตั้งช็อคโกแลตแล้วให้เพิ่มแหล่งที่มาโดยใช้คำสั่งต่อไปนี้:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck

1
ขอบคุณสำหรับ Chocolatey ไม่เคยรู้เรื่องนี้มาก่อน!
Richard Peck


6

ที่ MacOS ไม่มี / ข้างต้นดังต่อไปนี้ได้ทำงานจริงๆสำหรับฉันจนกว่าฉันจะมีให้อย่างชัดเจนเส้นทาง XCode libxml2 --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

ฉันสามารถติดตั้ง Nokogiri 1.6.5 บน Fedora 20 ได้โดยทำ:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

จากนั้นเรียกใช้:

gem install nokogiri

4

สำหรับคนอื่นที่ประสบปัญหานี้ฉันแก้ไขได้โดยการเรียกใช้คำสั่งนี้ในไดเรกทอรีโครงการ

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

อัปเดต: ฉันพบปัญหานี้อีกครั้งและลองอัปเดตอัญมณีที่เหมาะกับฉัน ...

gem update nokogiri


2

คุณลองติดตั้ง libxml2 หรือยัง ไม่ใช่จาก rubygems แต่ผ่านกระบวนการติดตั้งมาตรฐานสำหรับระบบปฏิบัติการของคุณ บน Ubuntu / Debian ตัวอย่างเช่น:

sudo apt-get install libxml2

ใน OS X เวอร์ชั่นล่าสุดควรติดตั้งไว้แล้ว


ฉันอยู่บน Ubuntu และฉันได้ปฏิบัติตามการติดตั้งข้างต้นทั้งหมดตามที่บอกในคำถามอื่น ๆ
Rohit A.

1

สำหรับผู้ใช้ OSX หากคุณประสบความสำเร็จในการติดตั้ง Nokogiri มาก่อน แต่ยังได้รับข้อผิดพลาดในการติดตั้งใช้งานโดยใช้ Ruby เวอร์ชันใหม่ที่คุณเพิ่มและข้อผิดพลาดที่มีข้อความเช่น:

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

นี่อาจเป็นตัวบ่งชี้ว่ามีการอัพเกรด XCode เกิดขึ้นผ่าน App Store ไม่ว่าจะด้วยตนเองหรือโดยอัตโนมัติและคุณไม่ได้เปิดมันตั้งแต่เวลานั้น

ถ้าเป็นเช่นนั้นคุณควรจะสามารถเปิด XCode ยอมรับใบอนุญาตใหม่แล้วติดตั้ง Nokogiri ได้สำเร็จ


1

ใน Mac OS X Yosemite ข้อผิดพลาดของฉันคือฉันพยายามใช้sudo gem installเมื่อเป็นกฎง่ายๆที่ไม่ใช้สิทธิ์ superuser เมื่อติดตั้งอัญมณี

ในกรณีของฉันมันพยายามแก้ไขการติดตั้งระบบของ Ruby และนั่นไม่ใช่ความคิดที่ดี ฉันติดตั้ง rbenv ติดตั้ง Ruby 2.2.2 ถึงมันและตั้งเป็นglobalซึ่งเป็นคำศัพท์จากเอกสารของ rbenv หลังจากนั้น Nokogiri สามารถติดตั้งตัวเองได้อย่างง่ายดาย

gem install nokogiri

ไม่จำเป็นต้องแฮ็กหรือการแก้ปัญหาเพียงแค่ตั้งค่าสภาพแวดล้อมที่เหมาะสม Nokogiri ทำส่วนที่เหลืออย่างสมบูรณ์แบบ


การใช้sudoก็โอเคถ้าคุณเข้าใจว่ามันทำงานยังไงมันจะมีผลทำไมไฟล์ที่กำลังติดตั้งหรืออัพเดทควรถูกติดตั้งและวิธียกเลิกการกระทำถ้ามันล้มเหลว มิฉะนั้นการใช้ sandbox เช่น rbenv หรือ RVM เป็นความคิดที่ดีจริงๆ
ชายดีบุก

1

สามารถติดตั้ง vagrant-awe ได้โดยทำตามโพสต์ด้านบน แต่ใช้คำสั่งดังนี้:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws


0

ฉันสามารถติดตั้ง Nokogiri ได้โดยใช้แพ็คเกจต่อไปนี้:

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

0

=== TLDR ===

ตามคำแนะนำให้สร้างทับทิมด้วยคอมไพเลอร์เสียงดังกราวล่าสุดหรืออย่างน้อยเวอร์ชั่นเดียวกับที่ Rubygems จะใช้ในการรวบรวมส่วนขยายดั้งเดิมของ Nokogiri libxml และ libxsl

หากใช้ RVM การสร้างจากแหล่งที่มี--with-ggc=clangธงเป็นสิ่งที่ทำเพื่อฉัน:

rvm install 2.2 --with-gcc=clang

แทนที่2.2ด้วยเวอร์ชันที่คุณต้องการ --with-gcc=clangสร้างความมั่นใจว่า RVM สร้างจากแหล่งที่มาและใช้เสียงดังกราว ไม่เช่นนั้น RVM อาจเป็นรูบีไบนารีที่สร้างไว้ล่วงหน้าซึ่งเป็นสิ่งที่ทำให้ฉันสะดุด

จากนั้นติดตั้ง Nokogiri ตามปกติโดยใช้ Bundler หรือ Rubygems

=== ในความลึก ===

ฉันดิ้นรนกับสิ่งนี้มาระยะหนึ่งแล้ว gem install nokogiriให้ฉัน:

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

ขุดลงไปที่mkmf.logฉันเห็น:

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

Nokogiri เป็นผู้จัดหา libxml และ libxsl ของตนเอง (ณ วันที่ 1.6.4) ลายเซ็นที่กำหนดไว้ในสำเนา parser.h ท้องถิ่นของ Nokogiri (พบในไดเรกทอรีติดตั้ง gem) คือ:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

ดังนั้นฉันจึงรู้สึกว่าวิธีการโทรในการใช้ไฟล์ conftest.c ที่ปิดผนึกอย่างผนึกแน่นนั้นไม่สามารถจับคู่กับไฟล์ส่วนหัวสำหรับ parser.h ได้

เมื่อฉันรู้ว่าฉันได้ติดตั้ง Ruby Ruby แบบไบนารีที่ฉันลบและติดตั้งใหม่โดยใช้--with-gcc=clang(เพื่อบังคับให้รวบรวมและใช้เสียงดังกราว) และปัญหาได้รับการแก้ไข:

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

ฉันไม่แน่ใจว่าทำไมสิ่งนั้นถึงทำงานเป็นส่วนหัวของระบบ libxml /usr/include/libxml2/libxml/parser.hมีลายเซ็นเดียวกันกับสำเนาในเครื่องของ Nokogiri

มันแปลก แต่ก็ใช้งานได้ เพียงให้แน่ใจว่าคุณรวบรวมทับทิมด้วยเสียงดังกราว


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

เปลี่ยนเวอร์ชั่นของคุณด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.