ทำไมการติดตั้ง Nokogiri บน Mac OS ล้มเหลวด้วย libiconv หายไป


159

ฉันพยายามจะติดตั้ง Nokogiri บน Mac OS 10.9.3 และไม่ว่าฉันจะพยายามอะไรการติดตั้งจะล้มเหลวในที่สุดด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้:

$ sudo 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.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib
Building native extensions with: '--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.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib'
This could take a while...
Building nokogiri using packaged libraries.
ERROR:  Error installing nokogiri:
    ERROR: Failed to build gem native extension.

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb --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.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib
Building nokogiri using packaged libraries.
checking for iconv.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... no
checking for libiconv_open() in iconv.h... no
checking for libiconv_open() in -liconv... no
-----
libiconv is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
    --help
    --clean
    --use-system-libraries
    --enable-static
    --disable-static
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=${zlib-dir}/include
    --with-zlib-lib
    --without-zlib-lib=${zlib-dir}/lib
    --enable-cross-build
    --disable-cross-build


Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/nokogiri-1.6.2.1 for inspection.
Results logged to /Library/Ruby/Gems/2.0.0/gems/nokogiri-1.6.2.1/ext/nokogiri/gem_make.out

หลังจากติดตามความช่วยเหลือมากมายที่พบในเว็บรวมถึงการสร้างและติดตั้ง libxml2 และ libxslt โดยใช้การสร้างและการสร้าง libiconv จากแหล่งที่มา (ดังอธิบายใน " การติดตั้ง Nokogiri ") ข้อผิดพลาดยังคงเหมือนเดิม

เมื่อพยายามเรียกใช้การติดตั้งสำหรับ Nokogiri ดูเหมือนว่า libxml2 และ libxslt จะไม่เป็นปัญหา แต่ไม่ใช่ libiconv

ทุกคนที่มีความรู้เกี่ยวกับสิ่งเหล่านี้รู้วิธีติดตั้ง Nokogiri มากขึ้น?


คุณไม่แสดงคำสั่งที่แน่นอนที่คุณพยายามจะใช้ดังนั้นเราจะถ่ายในที่มืดเพื่อพยายามตอบ ฉันใช้เสมอgem install nokogiriแต่จากนั้นฉันใช้ RVM เพื่อจัดการการติดตั้ง Mac OS Ruby ของฉัน libxml และ libxslt ไม่เกี่ยวข้องกับ iconv ดังนั้นฉันขอแนะนำให้ถามคำถามของคุณในNokogiri-talkซึ่งเป็นฟอรัมการสนับสนุนของพวกเขา ฉันจำไม่ได้ว่ามีปัญหาไอคอนvใด ๆ เมื่อติดตั้ง Nokogiri และฉันมีปัญหากับเครื่องจำนวนมาก
มนุษย์ดีบุก

1
ฉันอยู่ในระหว่างนี้เปิดตั๋วที่ github: github.com/tenderlove/nokogiri/issues/442ซึ่งมีข้อมูลเพิ่มเติมเล็กน้อย
polarblau

2
นี่คือลิงก์สำหรับแก้ปัญหาเดียวกันใน OSX El Capitan, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sbs

" sudo gem install nokogiri" อย่าใช้sudoเพื่อติดตั้งอัญมณีหรือแก้ไขทับทิมเริ่มต้น ใช้ rbenv หรือ RVM แทนเพื่อจัดการ Ruby แยกต่างหาก มีการครอบคลุมหลายครั้งใน Stack Overflow
มนุษย์ดีบุก

คุณได้ลองถอนการติดตั้ง xzก่อนติดตั้ง nokogiri หรือไม่
lifeisfoo

คำตอบ:


237

ฉันมีปัญหาเดียวกัน น่าเสียดายที่ " การติดตั้ง Nokogiri " ไม่ครอบคลุมปัญหา Iconv นี่คือวิธีที่ฉันแก้ไขปัญหา

เริ่มแรกติดตั้งhomebrewมันจะทำให้ชีวิตของคุณง่ายขึ้น หากคุณติดตั้งไว้แล้วอย่าลืมหยิบสูตรล่าสุดโดยอัปเดตดังนี้:

brew update

หมายเหตุ : ใน OSX 10.9+ คุณอาจต้องติดตั้งเครื่องมือคำสั่ง xCode เพื่ออนุญาตให้คุณติดตั้ง libiconv

xcode-select --install

จากนั้นติดตั้ง libiconv เวอร์ชันที่ใหม่กว่า

brew install libiconv

จากนั้นติดตั้งอัญมณีของคุณ

gem install nokogiri -- --with-iconv-dir=/usr/local/Cellar/libiconv/1.14

5
เมื่อฉันทำ "brew ติดตั้ง libiconv" และ "Brew link libiconv" ฉันสามารถติดตั้ง nokogiri ได้สำเร็จ ฉันหวังว่านั่นหมายความว่าฉันไม่ได้พึ่งพา libiconv รุ่นที่ติดตั้งโดยชงอย่างหนัก
สตีเวนชนิ

87
เมื่อฉันพยายามที่brew install libiconvจะพ่นออก: ข้อผิดพลาด: ไม่มีสูตรสำหรับ libiconv Apple แจกจ่าย libiconv ด้วย OS X คุณสามารถค้นหาได้ใน / usr / lib บิลด์สคริปต์บางตัวตรวจพบไม่ถูกต้องโปรดตรวจสอบสูตรที่มีอยู่เพื่อหาวิธีแก้ไข
เซท Bro

62
หากคุณกำลังใช้ Mavericks คุณอาจต้องติดตั้งเครื่องมือบรรทัดคำสั่งของ xcode-select --installXcode: นี่เป็นการแก้ไขปัญหาสำหรับฉัน
Michael Stalker

34
หากคุณยังไม่สามารถรับbrew install libiconvสูตรที่ถูกต้องให้ใช้สิ่งนี้:brew tap homebrew/dupes
jamesdlivesinatree

15
OS X Yosemite(10.10) ฉันไม่ต้องทำอะไรbrewเลย เพียงxcode-select --installแก้ไขปัญหานี้ให้ฉัน
bjfletcher

84

ลองใช้ไลบรารีระบบ OSX มาพร้อมกับ libiconv ในเวอร์ชันที่ใหม่กว่า แต่สคริปต์ติดตั้งค่าเริ่มต้นดูเหมือนว่าจะมีปัญหา

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

แก้ไข:หากใช้งาน Bundler ดังที่Geoffกล่าวไว้คุณสามารถทำได้:

bundle config build.nokogiri --use-system-libraries

5
หากใช้ bundler - คุณสามารถเรียกใช้ "bundle config build.nokogiri --use-system-libraries"
Geoff Evason

1
ในที่สุดการทำงาน "bundle config build.nokogiri --use-system-libraries" ฉันเกลียดเวลาที่เกิดขึ้น
nils petersohn

1
ทำงานกับฉันใน Mac OS 10.10 Yosemite
Lloyd Dewolf

เหตุใดฉันจึงต้องการส่วนเสริม "-" ที่อยู่ตรงกลางของคำสั่ง gem install?
Rembrandt Q. Einstein

3
ล้มเหลวสำหรับฉันในวันที่ 10.10.3 Xcode 6.3 libxml2 version 2.6.21 or later is required!ด้วย
Rivera

36

วิธีแก้ปัญหาของ @ Cory มีคำตอบที่ถูกต้อง แต่วิธีแก้ปัญหาของ Mavericks นั้นง่ายกว่าโซลูชันระดับสูงมากดังนั้นฉันจึงโพสต์ใหม่ด้วยขั้นตอนที่จำเป็นเท่านั้น

บน Mavericks (OSX 10.9+):

ติดตั้งเครื่องมือบรรทัดคำสั่ง Xcode:

xcode-select --install

จากนั้นติดตั้งอัญมณีของคุณ:

gem install nokogiri

4
ใช้งานได้กับโยเซมิตี ดีใจที่ฉันเลื่อนลงและไม่ได้ใช้คำตอบที่เก่ากว่า
yuяi

timesaver ใหญ่ขอบคุณสำหรับเคล็ดลับนี้! ทำงานที่มีเสน่ห์สำหรับฉันใน mavericks
ice cream

คุณลองใช้โซลูชันของฉันหรือไม่ มันไม่จำเป็นต้องมีการใส่รหัส xcode
Filip Kis

นี่เป็นวิธีแก้ปัญหาอย่างเป็นทางการจากเอกสาร Nokogiri ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ) และเป็นเอกสารเดียวที่ทำงานกับ El Capitan โซลูชันที่ยอมรับไม่ทำงานที่นั่น
โยฮันเนส

ทำงานให้ฉันใน El Capitan, ทำให้โกรธมาก ขอบคุณสำหรับลิงก์ไปยังเอกสาร Nokogiri @Johannes - มีประโยชน์จริงๆ ทุกคนควรอยู่ห่างจากโซลูชันที่บอกว่า "ใช้ไลบรารีระบบ" - คำแนะนำที่ไม่ดี
Polsonby

19

ในที่สุดฉันก็สามารถแก้ปัญหานี้ได้ วิธีการแก้ปัญหาข้างต้นไม่ได้แก้ไขทั้งหมดสำหรับฉัน

ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามใช้gem install nokogiriOSX Lion 10.7.2 ก่อนอื่นข้อผิดพลาดนี้ปกปิดปัญหาจริงโดยบอกว่า libiconv หายไปเพราะคุณจะได้รับข้อผิดพลาดเดียวกันแม้ว่า nokogiri ไม่สามารถหา libxslt หรือ libxml2 ซึ่งในกรณีของฉันมันไม่สามารถทำได้

ดังนั้นฉันจึงทำตามคำแนะนำในhttp://nokogiri.org/tutorials/installing_nokogiri.htmlภายใต้ส่วน Homebrew (แก้ไขเล็กน้อยเพื่อบัญชีสำหรับ libxml2 รุ่นปัจจุบันมากขึ้น):

brew install libxml2
brew link libxml2

# install libxslt from source
wget ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz
tar -zxvf libxslt-1.1.26.tar.gz
cd libxslt-1.1.26
./configure --prefix=/usr/local/Cellar/libxslt/1.1.26 --with-libxml-prefix=/usr/local/Cellar/libxml2/2.7.8
make
sudo make install

เมื่อมาถึงจุดนี้ฉันทำตามคำแนะนำบนเว็บไซต์ nokogiri และลอง

gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26

อย่างไรก็ตามสิ่งนี้ยังคงล้มเหลวเพราะเมื่อสร้าง libxslt จากแหล่งที่มามันจะติดตั้ง/includeโฟลเดอร์ในสถานที่ที่ขี้ขลาด ดังนั้นคุณต้องระบุlibและincludeโฟลเดอร์แยกกันดังนี้:

gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt

สิ่งนี้ยังคงใช้งานไม่ได้ (ข้อผิดพลาด libiconv เดียวกัน) ดังนั้นฉันจึงพยายามระบุทั้งสามไลบรารีที่ต้องการ (libxslt, libxml2 และ libiconv):

gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt --with-iconv-dir=/usr/local/Cellar/libiconv/1.14 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8

ตอนนี้ฉันได้รับข้อผิดพลาดอื่น! มันยังคงเป็นข้อผิดพลาด แต่อย่างน้อยก็แตกต่างกัน กระบวนการทำให้ล้มเหลวด้วย:

in /opt/local/lib/libz.1.dylib, file was built for unsupported file format which is not the architecture being linked (x86_64) for architecture x86_64

เอ่ออะไร หลังจาก googling เป็นจำนวนมากฉันเจอโพสต์มหัศจรรย์นี้: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -สถาปัตยกรรม/

เห็นได้ชัดว่า OSX Lion มาพร้อมกับไลบรารี libz ( libz.dylib, libz.1.dylib, libz.1.2.4.dylib) เวอร์ชันที่ไม่ดีบางตัวและพวกเขาต้องถูกแทนที่ด้วยเวอร์ชันล่าสุดจาก Xcode SDK บทความอธิบายได้ดีกว่าฉันสามารถอ่านลิงก์ด้านบนเพื่อดูคำแนะนำเฉพาะ

เมื่อสิ่งเหล่านี้ถูกแทนที่ฉันวิ่ง

gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt --with-iconv-dir=/usr/local/Cellar/libiconv/1.14 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8

อีกครั้งและทุกอย่างก็ดี ฉันหวังว่านี่จะช่วยคนอื่นได้


ฉันพบปัญหาเดียวกัน แต่ฉันพบว่าการลบไฟล์ต่อไปนี้จาก opt / local / lib: libz.dylib และ libz.1.dylib และทำตามคำแนะนำที่เหลือเหล่านี้ก็ไม่ได้หลอกลวง
Undistraction

1
ฉันคิดว่า / opt / local หมายถึงการติดตั้ง MacPorts หากคุณใช้ homebrew และ Macports คุณจะพบกับความสนุกสนาน (ดังที่เห็นในกรณีของคุณ) ทางออกที่ดีที่สุดคือถอนการติดตั้ง Macports และใช้ homebrew สำหรับบรรจุภัณฑ์ของคุณ
คอรี

ฉันได้เพิ่มโซลูชันที่ง่ายกว่าสำหรับ Mavericks (OSX 10.9+) ด้านล่าง
คา Winkelspecht

17

เพียงแค่เพิ่มเสียงของฉันให้กับฝูงชน แต่ mkmf.log พูดอะไรบางอย่างเกี่ยวกับการไม่สามารถหาสัญลักษณ์สำหรับสถาปัตยกรรม x86_64 ฉันเจอปัญหานี้:

sudo env ARCHFLAGS="-arch x86_64" gem install nokogiri -- --use-system-libraries

ไม่สามารถแก้ปัญหาใด ๆ สำหรับผู้ถามเดิม แต่อาจช่วยได้

หมายเหตุด้าน: nokogiri เป็นอุปสรรคสูงสุดของฉันในการใช้แอปพลิเคชันทับทิม ทุกครั้งที่มีคนขึ้นอยู่กับรุ่นที่แตกต่างกันฉันต้องคิดออกว่าจะสร้างมันอย่างไร และปัญหาของฉันก็แตกต่างกันทุกครั้ง


1
เห็นด้วยกับความรู้สึกของ nokogiri ของคุณ ทุกๆ เดียว เวลา.
jbnunn

ไม่ได้ผลสำหรับฉันในรูปแบบนี้ แต่ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariesได้ผล ...
bwoebi

วิธีนี้ใช้ได้ผลสำหรับฉันเช่นกันทางออกที่ง่ายกว่ามากฉันไม่ได้ใช้ ARCHFLAGS เพียงแค่ติดตั้ง sudo gem ติดตั้ง nokogiri - --use-system-libraries
ryudice

8

gem install nokogiri -v '1.6.6.2' -- --use-system-libraries --with-xml2-include=$(brew --prefix libxml2)/include/libxml2

สิ่งนี้ใช้ได้กับฉันใน macos มันทำงานได้กับรุ่น1.6.6.4


ทำงานโดยไม่มี--with-xml2-includeตัวเลือกสำหรับฉันใน Catalina ... gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
ryanc

6

ฉันใช้ .. OS X 10.9.4 Homebrew 0.9.4

นี่คือหน้าร้อนของฉันจากชุดข้อความนี้เพื่อให้สามารถติดตั้ง nokogiri ได้สำเร็จโดยแก้ไข libiconv ที่ขาดหายไป

ติดตั้งHomebrew http://brew.sh/ หรืออัปเดตล่าสุดโดยใช้คำสั่งด้านล่าง

brew update

ติดตั้ง libxml2 libxslt

brew install libxml2 libxslt

เชื่อมโยงทั้งสอง libxml2 libxslt

brew link libxml2 libxslt

หากคุณได้รับคำเตือนให้ใช้ - บังคับใช้คำสั่งด้านล่าง

brew link --force libxml2 libxslt

ติดตั้งเครื่องมือคำสั่ง xCode เพื่อให้คุณติดตั้ง libiconv

xcode-select --install

ติดตั้ง libiconv

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Cellar/libiconv/1.13.1
make
sudo make install

ขั้นตอนสุดท้ายติดตั้ง nokogiri!

gem install 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 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib

5

ฉันแก้ไขสิ่งนี้เมื่อYosemiteทำงานRuby 2.1.4โดย

  1. ให้แน่ใจว่าคุณติดตั้ง xCode 6.1 แล้ว
  2. xcode-select --installจากนั้น
  3. ใน AppStore คลิกที่การปรับปรุงและติดตั้งเครื่องมือบรรทัดคำสั่งเวอร์ชันล่าสุด (ซึ่งเห็นได้ชัดว่าxcode-select --installไม่ทำ - ถอนหายใจ)
  4. แล้วbundle installทำงานเป็นปกติ

ฉันก็ทำbrew install libiconvเช่นกัน แต่ฉันไม่มั่นใจว่าขั้นตอนนั้นเป็นสิ่งจำเป็น


ฉันไม่เชื่อว่าbrew install libiconvจำเป็น - ฉันไม่เคยใส่ใจที่จะหาแพ็คเกจที่เหมาะสมและมันใช้ได้ดีสำหรับฉัน จริงอยู่ที่มันอาจมาจากเครื่องของฉันเมื่อฉันติดตั้ง nokogiri ด้วย ruby ​​2.1.1 มาก่อน
jmstone617

"ใน AppStore คลิกที่การปรับปรุงและติดตั้งเครื่องมือบรรทัดคำสั่งรุ่นล่าสุด (ซึ่งเห็นได้ชัดว่าเลือก xcode - ติดตั้งไม่ได้ทำ - ถอนหายใจ)" - ไม่มีการปรับปรุงใด ๆ ฉันจะอัพเดตเครื่องมือบรรทัดคำสั่งของฉันจาก Xcode ได้อย่างไร พวกเขาจะไม่ปรากฏในส่วน "ดาวน์โหลด" ของบานหน้าต่างการตั้งค่า
chadoh

สิ่งนี้ใช้ได้สำหรับฉันโดยไม่ต้องไปที่ app store ฉันอัปเดตเครื่องมือบรรทัดคำสั่งและระบบปฏิบัติการ (เป็นโยเซมิตี) จากนั้นวิ่งxcode-select --installและฉันสามารถติดตั้ง Nokogiri ได้
เหล็ก

ฉันต้องทำ: xcode-select - ติดตั้ง .. ชงติดตั้ง libxml2 .. มัด config build.nokogiri - ใช้งานระบบห้องสมุด .. ติดตั้งมัด
Zack Burt

4

ฉันลองหลายอย่างแล้วแต่ไม่มีอะไรเหมาะกับฉัน ในที่สุดฉันก็พบเอกสาร iconvและมันช่วยวันของฉัน!


ขอบคุณมาก ๆ. มันช่วยวันของฉันด้วย
pisaruk

3

เมื่อมองดูไฟล์ mkmf มันก็เป็นไปได้ว่า nokogiri (หรืออัญมณีฉันไม่รู้) พยายามค้นหาการพึ่งพาใน / op / local / สำหรับฉันมันไม่ใช่เส้นทางที่ถูกต้องในการค้นหา

การบังคับให้ nokogiri ค้นหา libs ในที่ที่ถูกต้อง (ฉันใช้ homebrew) ทำเคล็ดลับสำหรับฉัน:

$ gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8/

อาจมีบางสิ่งที่จะแก้ไขใน nokogiri ...

HTH,


3

libiconv ถูกลบออกจาก Homebrew 0.9 ตอนนี้ก็ขอแนะนำให้รวบรวม libiconv จากแหล่งที่มาแล้วอ้างอิงการติดตั้งเมื่อคุณติดตั้งอัญมณี nokogiri ดูคำแนะนำการติดตั้ง Nokogiri ภายใต้ส่วน Homebrew 0.9 ในหน้าติดตั้ง Nokogiri


ณ วันนี้ฉันสามารถเรียกใช้ $ brew ติดตั้ง libiconv และดาวน์โหลดและติดตั้ง libiconv-1.14.tar.gz
Evolve

2

ดูในไฟล์ mkmf.log ในไดเรกทอรีสร้างของอัญมณี (เช่น /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log) มีข้อมูลมากขึ้น ในกรณีของฉันเมื่อฉันตีสิ่งนี้มันเป็นสิ่งที่ Nokogiri เพิ่ม / opt / local / lib ลงในพา ธ การค้นหาไลบรารีโดยเฉพาะและ GNU Backgammon ได้ติดตั้ง libiconv ที่เข้ากันไม่ได้


2

สมมติว่าคุณติดตั้ง libxml2 และ libxslt ด้วย MacPorts แล้วคุณอาจยังได้รับข้อผิดพลาดนี้เนื่องจากคำสั่งของพา ธ รวมและเส้นทางลิงก์ที่ใช้โดยการเรียกใช้ have_func ('iconv_open', 'iconv.h')

โซลูชันแบบง่าย (แพทช์): ลบ libiconv. * ใน / usr / local / lib


ฉันได้ติดตั้ง libxml2 และ libxslt ด้วย MacPorts แล้ว แต่ไม่มีไฟล์ libiconv. * ใน / usr / local / lib
Valerio Schiavoni

2
$ gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8/

เช่นเดียวกับข้างต้นนี่เป็นวิธีแก้ปัญหาสำหรับ homebrew และใช้ gem install (ใช้การเปลี่ยนแปลงขึ้นอยู่กับรุ่นของคุณ)

อย่างไรก็ตามหากคุณใช้ Gemfile และการติดตั้งมัดคุณควรใช้การกำหนดค่ามัดก่อนที่จะติดตั้งรหัสที่นี่

$ bundle config build.nokogiri --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8/ --with-iconv-dir=/usr/local/Cellar/libiconv/1.14

อีกครั้งใช้การเปลี่ยนแปลงขึ้นอยู่กับรุ่นของคุณ

หวังว่านี่จะช่วยคุณได้

เครดิต: https://gist.github.com/1344331


2

ฉันมีปัญหาคล้ายกับ Mountain Lion กลับกลายเป็นว่าฉันได้ติดตั้ง libiconv ผ่านแพ็คเกจ rvm ก่อนหน้านี้และไม่จำเป็นสำหรับ ruby ​​1.9.3 / Mountain Lion / nokogiri อีกต่อไป

ทำตามคำแนะนำของhttps://rvm.io/packages/ฉันลบไดเรกทอรี $ rvm_path / usr และสร้าง ruby ​​1.9.3 ขึ้นมาใหม่ หลังจากนั้นการติดตั้ง nokogiri นั้นเป็นการติดตั้งที่ง่าย ไม่ยุ่งกับการติดตั้ง Brew / Macports / คู่มือ!


2

คุณสามารถทำสิ่งนี้กับ Mavericks:

gem install nokogiri - --use-system-libraries = true --with-xml2-include = / Applications / Xcode.app / เนื้อหา / นักพัฒนา / แพลตฟอร์ม / MacOSX.platform / ผู้พัฒนา / SDKs / MacOSX10.9.sdk / usr / รวม / libxml2

เพียงให้แน่ใจว่าคุณติดตั้ง xcode แล้ว


วิธีการแก้ปัญหาเดียวกันนี้ยังใช้งานได้ 10.7.5: gem install nokogiri - --use-system-libraries = จริง --with-xml2-include = / Applications / Xcode.app / เนื้อหา / นักพัฒนา / แพลตฟอร์ม / MacOSX.platform / Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
tolginho

2

ฉันต่อสู้กับ Nokogiri ซักพักหนึ่งวันนี้ใน OS X 10.10 โยเซมิตี

สภาพแวดล้อมของฉันวุ่นวายด้วยเหตุผลบางอย่าง

which bundleและwhich gemให้ฉัน/usr/bin/bundleและ/usr/bin/gemแทน~/.rbenv/shims/gem

สิ่งที่ช่วยแก้ไขให้ฉันก็คือ sudo rm -i /usr/bin/gem /usr/bin/bundle

หลังจากนั้นฉัน: 1. เปลี่ยนกลับไปเป็นไดเรกทอรีโครงการของฉัน 2. ถอนการติดตั้งตัวพึ่งพา 3. (ใหม่) - ติดตั้ง libs ที่ต้องพึ่งพา: ทำbrew install libxml2 libiconv libxslt 4. ติดตั้งรุ่นทับทิมของฉันใหม่ (พร้อม rbenv) 5. ทำgem install bundler 6. และ bundle installวิ่งโดยไม่มี ปัญหาที่เกิดขึ้น

Nokogiri หลังจากนั้นก็ไม่เป็นไร

สำหรับการอ้างอิง:

╰─% cat .bundle/config           
---
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'
BUNDLE_JOBS: 4

╰─% which ruby bundle gem
~/.rbenv/shims/ruby
~/.rbenv/shims/bundle
~/.rbenv/shims/gem

1
ในการเข้าใจย้อนหลัง (ซึ่งมักเป็น 20/20) ฉันอาจจะปรับ PATH env-variable ของฉันเพื่อเพิ่ม rbenv ก่อน
Sam Figueroa

1

คุณต้องอัพเกรด homebrew เป็น 0.9

จากนั้นทำตามขั้นตอนเหล่านี้

brew install libxml2 libxslt
brew link libxml2 libxslt
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Cellar/libiconv/1.13.1
make
sudo make install

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

gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.0/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib

คุณควรตรวจสอบเวอร์ชั่นไลบรารี่ของโฟลเดอร์อีกครั้ง


การเชื่อมโยงและ sudo จะทำลายสิ่งต่าง ๆ พวกเขาเป็นถังเท่านั้นด้วยเหตุผลหลายประการ ใช้สูตรการชงเพราะมีวิธีง่ายต่อการบำรุงรักษา brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv

1

ผู้ใช้ HOMEBREW

วิธีแก้ไขที่ถูกต้องเพื่อแก้ไขปัญหานี้หากคุณใช้ homebrew:

xcode-select --install

เลือก "รับ Xcode" จากกล่องโต้ตอบ

brew unlink libiconv
gem install nokogiri

ขั้นตอน xcode-select จะแก้ไขการติดตั้ง Xcode ของคุณและการติดตั้ง Xcode Command Line Utils ฉันพบว่าฉันไม่มี /usr/include/iconv.h เนื่องจากมีปัญหาบางอย่างกับการอัปเกรด O / S หรือกู้คืนจากการสำรองข้อมูล หากคุณไม่มีไฟล์ส่วนหัวและ /usr/lib/libconv.dylib หลังจากรัน xcode-select คุณอาจต้องลาก Xcode จากโฟลเดอร์แอปพลิเคชันไปยังถังขยะแล้วติดตั้งใหม่จากนั้นดาวน์โหลดเครื่องมือบรรทัดคำสั่งสำหรับ Xcode ด้วยตนเอง จากhttps://developer.apple.com/downloads/index.actionและติดตั้ง

จากนั้นคุณต้องยกเลิกการเชื่อมโยง libiconv จาก homebrew คุณไม่ต้องการสิ่งนี้ และเสียงดังกราวจะหยิบขึ้นมา /usr/local/include/iconv.h มากกว่า /usr/include/iconv.h และจะ #define iconv_open เป็น libiconv_open แต่แล้วเชื่อมโยงกับ /usr/lib/libiconv.dylib ซึ่งไม่มี libiconv_open คือสาเหตุที่ทำให้ mkmf ล้มเหลวในการค้นหา libiconv สิ่งที่คุณต้องทำคือลบการเชื่อมโยงในของ iconv.h เพื่อให้ nokogiri ไม่พบมัน

จากนั้นก็สร้าง nokogiri ตามปกติ

สำหรับผู้ใช้ใหม่สิ่งที่คุณต้องทำก็คือติดตั้ง xcode ด้วย xcode-select และติดตั้ง nokogiri แต่ถ้าคุณพบคำถามนี้ก็น่าจะเป็นการติดตั้งที่เรียบร้อยและไม่ได้ติดตั้ง Mavericks ใหม่

คำตอบอื่น ๆ ที่นี่บางอย่างไม่ถูกต้องแน่นอน ส่วนใหญ่พยายามใช้ libiconv จาก homebrew ซึ่งไม่จำเป็นทั้งหมด คำตอบที่brew link libiconvทำให้เกิดปัญหาจริง ๆ ซึ่งเสียงดังกราวสับสนและพยายามอ่านไฟล์ส่วนหัวโฮมบรูว์และลิงก์กับไลบรารีระบบ คำตอบที่แนะนำ--use-system-librariesไม่ดีเนื่องจาก nokogiri จำเป็นต้องเชื่อมโยงกับไลบรารี libxml2 และ libxslt ที่รวมอยู่เพราะห้องสมุดรุ่นอื่นไม่สามารถทำงานร่วมกันได้ คำตอบที่ต้องการให้คุณรวบรวมจากแหล่งข้อมูลนั้นซับซ้อนเกินไปอย่างสิ้นหวัง

TL; DR:

  • อัปเกรดและ / หรือซ่อมแซมการติดตั้ง Xcode ของคุณ
  • ยกเลิกการเชื่อมโยง Homebrew ของคุณเนื่องจากพยายามใช้สิ่งที่ทำให้เกิดปัญหาเท่านั้น
  • สร้าง nokogiri ตามปกติ

ผู้ใช้ RVM

การติดตั้ง RVM เก่าอาจมี libiconv ซ่อนอยู่ในไดเรกทอรี rvm ของคุณที่ซึ่งขัดแย้งกับไลบรารีระบบของคุณ ดูhttps://stackoverflow.com/a/11809261/506908สำหรับข้อมูลเพิ่มเติม

MacPort USERS

หากคุณมี /opt/local/lib/libiconv.dylib ดังนั้น nokogiri จะเพิ่มพา ธ ไปยังรายการไดเร็กทอรีที่ค้นหาและจะพบการติดตั้ง MacPorts คล้ายกับวิธีการเลือก libbrewv Homebrew และขัดแย้งกับไลบรารีระบบ คุณสามารถลอง:

sudo port uninstall libiconv

หากสิ่งนั้นล้มเหลวเนื่องจากการขึ้นต่อกันคุณสามารถลองเชื่อมโยงกับเวอร์ชั่น MacPorts โดยตรง (ไม่ได้ทดสอบ):

gem install nokogiri -- --with-iconv-dir=/opt/local

การยืนยันใช้gem install nokogiri -- --with-iconv-dir=/opt/localงานได้ดีกับการlibiconvติดตั้งMacPorts
PartialOrder

1

อันนี้ใช้ได้สำหรับฉัน

sudo env ARCHFLAGS = "- arch x86_64" gem ติดตั้ง nokogiri: 1.6.6.2 - --use-system-libraries --with-xml = / usr / local / Cellar / libxml2 / 2.9.3 / --with-iconv- dir = / usr / local / Cellar / libiconv / 1.14


มันเป็นคำสั่งผสมของ --use-system-libraries และ - with-iconv-dir ที่ทำเพื่อฉัน
aaaarrgh

0

ฉันวิ่งเข้าไปในนี้เช้านี้ ... หลังจากอัปเกรดเป็น Mavericks เราทำหลายสิ่งหลายอย่าง อย่างไรก็ตามหากใครมีปัญหานี้ที่นี่มีบางสิ่งที่จะลอง

ฉันใช้งาน 'xcode-select - install' จากนั้นติดตั้งเครื่องมือบรรทัดคำสั่ง (แปลกใจที่นี่ไม่ได้อัปเดตในระบบปฏิบัติการ ugrade) ฉันรัน 'rvm implode' (ฉันจะสร้างมันขึ้นมาใหม่ในภายหลัง)

เราได้รวมไฟล์เอาต์พุตข้อผิดพลาดสองไฟล์เข้าด้วยกัน:

~ / .vagrant.d / อัญมณี / อัญมณี / nokogiri-1.6.3.1 / ต่อ / nokogiri / gem_make.out

~ / .vagrant.d / อัญมณี / อัญมณี / nokogiri-1.6.3.1 / ต่อ / nokogiri / tmp / x86_64-แอปเปิ้ล darwin12.5.0 / พอร์ต / libxml2 / 2.8.0 / configure.log

ซึ่งดูเหมือนจะบ่งบอกว่าคอมไพเลอร์ c กำลังใช้การตั้งค่าที่น่าแปลกใจ

ฉันวิ่ง 'env'

มีเอาต์พุต:

...
CXX=/usr/local/opt/apple-gcc42/bin/g++-4.2
...
CC=/usr/local/opt/apple-gcc42/bin/gcc-4.2
...

ไฟล์เหล่านี้ไม่มีอยู่ในระบบไฟล์ ...

หลังจากการเปลี่ยนแปลงทั้งหมดนี้ย้ายไปที่หน้าต่างเทอร์มินัลใหม่ (ดังนั้นทุกอย่างจึงสดใหม่) การติดตั้งของคนจรจัด -Berkshelf (ซึ่งจะติดตั้ง nokogiri) ทำงานได้ดี

หมายเหตุ: เมื่อเรียกใช้ 'env' ในหน้าต่างใหม่ไม่มีการตั้งค่าสำหรับ CC หรือ CXX อีกต่อไป ...

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


คุณแน่ใจหรือว่าคำสั่งgem install nokogiriสำเร็จ เหี่ยวแห้งพร้อมกับข้อความ "ติดตั้งแล้ว" หรือการติดตั้งสำเร็จหรือไม่
Spundun

ใช่. ฉันได้ติดตั้ง rvm ใหม่อีกครั้งและ oh-my-zsh เมื่อฉันสร้างสิ่งต่าง ๆ บน Mac ของฉัน สิ่งที่ฉันไม่สามารถหาได้คือวิธีติดตั้ง nokogiri บน rvm gemset เมื่อฉันเปลี่ยนกลับเป็น 'rvm use system' ฉันสามารถติดตั้ง nokogiri 1.6.3.1 เหนือส่วนบนของ 1.5.6 ที่มากับ OS X ruby ​​2.0.0p451
aaron blythe

ในที่สุดสำหรับฉันมันเป็นstackoverflow.com/questions/19643153/… ชงถอนการติดตั้งแอปเปิ้ล -gcc42 ชงติดตั้งติดตั้ง apple-gcc42
blythe

0

ตามเอกสารประกอบของ OSX 10.9 และ Homebrew 9.5+ คุณอาจขาดเครื่องมือในการพัฒนา

การติดตั้ง Nokogiri

การแก้ไขปัญหา

หากคุณมีปัญหาในการพูดถึง libiconv ที่ขาดหายไปซึ่งมีลักษณะดังนี้:

Installing nokogiri (1.6.2.1) Building nokogiri using packaged libraries.

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /usr/local/rvm/rubies/ruby-2.0.0-p0/bin/ruby extconf.rb
Building nokogiri using packaged libraries.
checking for iconv.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... no
checking for libiconv_open() in iconv.h... no
checking for libiconv_open() in -liconv... no
-----
libiconv is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for          help with installing dependencies.
-----
*** extconf.rb failed ***

ถ้าอย่างนั้นคุณอาจขาดเครื่องมือผู้พัฒนาที่เหมาะสม นี่เป็นการแก้ไขที่ง่ายมาก:

brew unlink gcc-4.2      # you might not need this step
gem uninstall nokogiri
xcode-select --install
gem install nokogiri

สิ่งนี้ได้รับการตรวจสอบแล้วว่าทำงานได้กับคอมไพเลอร์ clang ของ OSX 10.9 w / xcode


0

ฉันได้รับปัญหานี้เมื่อฉันอัพเกรด Mac OS เป็น Yosemite ฉันสามารถแก้ไขปัญหานี้ได้โดยทำ:

xcode-select --install
brew uninstall libiconv
brew install libiconv
gem install nokogiri

0

ฉันมีปัญหาที่คล้ายกันและคำตอบที่ยอมรับใช้สำหรับฉัน ตอนนี้อย่างไรก็ตามฉันได้เห็นข้อความแสดงข้อผิดพลาดใหม่ซึ่งgmkdirคำสั่งหายไปเหมือนในคำถามนี้:

gem install nokogiri -v '1.5.11' ล้มเหลวเนื่องจากทำให้: / usr / local / bin / gmkdir: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

สิ่งที่ได้ผลสำหรับฉันคือการทำความสะอาดครั้งแรก:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

และจากนั้นbrew unlink libiconvและสิ่งอื่นที่คุณต้องการยกเลิกการเชื่อมโยง (ตรวจสอบด้วยbrew doctor) จากนั้นเวทมนตร์สองบรรทัด (คัดลอกมาจากคำตอบที่เชื่อมโยง):

brew install coreutils
gem install nokogiri

0

ขั้นตอนง่าย ๆ ที่จะทำตามก่อนที่คุณจะเริ่มถอนการติดตั้งและติดตั้งอะไรก็ได้ ตรวจสอบว่าคุณมี CLT (ติดตั้งเครื่องมือบรรทัดคำสั่ง):

brew config

ดูรุ่น CLT ที่นี่ถ้าติดตั้งแล้วไม่จำเป็นต้องทำการติดตั้งใหม่

ซึ่งหมายความว่าปัญหานี้ได้รับอนุญาตจากคุณได้ติดตั้งเฉพาะอัญมณีของ Bundler ทำให้มันไม่ใช่ sudo ถอนการติดตั้ง bundler ด้วยการ gem uninstall bundler ติดตั้ง gem bundler ใหม่ gem install bundler

จุดที่สำคัญที่สุดที่นี่คือการอนุญาตตามที่ติดตั้งอัญมณี bundler มันไม่ควร sudoed


-1

ก่อนอื่นตรวจสอบให้แน่ใจว่าคุณทำตามคู่มือการติดตั้งบน nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

หลังจากทำตามคำแนะนำฉันยังคงมีปัญหานี้ นี่คือวิธีที่ฉันแก้ไขมัน:

ก่อนอื่นฉันได้ติดตั้ง iconv โดยใช้ homebrew: brew ติดตั้ง iconv

จากนั้นฉันถอนการติดตั้งทับทิมโชคดีที่มันง่ายมากด้วย rvm:

rvm uninstall 1.9.2        

จากนั้นฉันต้องติดตั้งทับทิมใหม่ด้วยตัวเลือกต่อไปนี้:

CC=gcc-4.2 rvm install 1.9.2-p290 --with-iconv-dir=/usr/local/Cellar/libiconv/1.13.1

จากนั้นฉันสร้าง gemset ด้วยทับทิมเวอร์ชั่นใหม่:

rvm use 1.9.2@coolproject

จากนั้นฉันก็สามารถติดตั้ง nokogiri ในลักษณะนี้ได้:

gem install nokogiri -v=1.4.4 -- --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

-1

ในกรณีของฉัน (เช่นเดียวกับ scotchi) การสร้างล้มเหลวเนื่องจากไลบรารี iconv ที่เข้ากันไม่ได้ใน / opt / local / lib ตามค่าเริ่มต้นกระบวนการสร้างของ Nokogiri จะดูที่ / opt / local ก่อน หากต้องการบังคับให้ใช้ไดเร็กทอรีการติดตั้งอื่น / usr / local ตัวอย่างเช่นให้ทำ:

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

-1

โพสต์บล็อกนี้เสนอให้ติดตั้ง libiconv ด้วยตนเอง

ต่อจากนั้นสามารถติดตั้ง nokogiri ด้วยสวิตช์จำนวนหนึ่งเพื่อบอกตำแหน่งที่จะหา libiconv (ดูโพสต์บล็อก)

ในฐานะที่เป็นหมายเหตุด้านข้าง: หลังจากติดตั้ง nokogiri ฉันจัดการเพื่อติดตั้งกอลลัม (การติดตั้งซึ่งล้มเหลวเนื่องจากไม่สามารถหา iconv) ตอนนี้ฉันยังคงประสบปัญหาอยู่เพราะเมื่อฉันเริ่มกอลลัม Python จึงล้มเหลว


-1
$ gem install iconv # works but it is missing an iconv.so file in ruby 2.0.0-p247

$ ls -1 2.0.0-p0/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/*/*/*.so
2.0.0-p0/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/ext/iconv/iconv.so*
2.0.0-p0/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/lib/iconv/iconv.so*

$ ls -1 2.0.0-p247/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/*/*/*.so
2.0.0-p247/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/ext/iconv/iconv.so*

หมายเหตุไฟล์ /lib/iconv/iconv.so ที่หายไปใน 2.0.0-p247 ที่มีอยู่ในการติดตั้งอัญมณี 2.0.0-p0

$ rbenv version
2.0.0-p247 (set by /home/XXX/tmp/.ruby-version)
$ rbenv which gem
/home/XXX/.rbenv/versions/2.0.0-p247/bin/gem
$ gem --version
1.8.25

$ rbenv which pry
/home/XXX/.rbenv/versions/2.0.0-p247/bin/pry
$ pry
[1] pry(main)> require 'iconv'
LoadError: cannot load such file -- iconv/iconv.so
from /home/XXX/.rbenv/versions/2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/custom_require.rb:36:in `require'

คัดลอกไฟล์ทับ

$ pushd ~/.rbenv/versions/
$ cp 2.0.0-p247/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/ext/iconv/iconv.so 2.0.0-p247/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/lib/iconv/

ตอนนี้มันทำงาน!

$ pry
[1] pry(main)> require 'iconv'
=> true

หมายเหตุ: ฉันกำลังทำงานกับ rbenv แต่ปัญหานี้เป็นปัญหาเฉพาะสำหรับการติดตั้งอัญมณีและควรแก้ไขการสตรีม!
Darren Weber

คำตอบนี้ไม่เกี่ยวข้องกับไลบรารี C libiconv ที่บิวด์ของ nokogiri ขึ้นอยู่กับ คำตอบควรถูกลบออกจริงๆ
lamont

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