Tại sao cài đặt Nokogiri trên Mac OS không thành công với libiconv?


159

Tôi đã cố gắng cài đặt Nokogiri trên Mac OS 10.9.3 và bất cứ điều gì tôi thử, cuối cùng cài đặt không thành công với thông báo lỗi sau:

$ 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

Sau khi làm theo rất nhiều trợ giúp được tìm thấy trên web bao gồm xây dựng và cài đặt libxml2 và libxslt bằng cách sử dụng brew và xây dựng libiconv từ các nguồn (như được mô tả trong " Cài đặt Nokogiri "), lỗi vẫn như cũ.

Khi cố gắng chạy cài đặt cho Nokogiri, libxml2 và libxslt dường như được tìm thấy tốt, nhưng không phải libiconv.

Bất cứ ai có kiến ​​thức tốt hơn về những điều này đều biết cách cài đặt Nokogiri?


Bạn không hiển thị các lệnh chính xác mà bạn đang cố sử dụng, vì vậy chúng tôi sẽ bắn trong bóng tối để cố gắng trả lời. Tôi luôn sử dụng gem install nokogiri, nhưng sau đó tôi sử dụng RVM để quản lý các bản cài đặt Mac OS Ruby của mình. libxml và libxslt không liên quan đến iconv, vì vậy tôi khuyên bạn nên đặt câu hỏi của bạn trên Nokogiri-talk , diễn đàn hỗ trợ của họ. Tôi không nhớ có bất kỳ vấn đề iconv nào khi cài đặt Nokogiri và tôi có nó trên một loạt các máy.
Tin Man

1
Trong khi đó, tôi đã mở một vé tại github: github.com/tenderlove/nokogiri/issues/442 có chứa thêm một chút thông tin.
Polarblau

2
Đây là một liên kết để giải quyết vấn đề tương tự trên OSX El Capitan, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sbs

" sudo gem install nokogiri". Không sử dụng sudođể cài đặt đá quý hoặc sửa đổi Ruby mặc định. Thay vào đó, hãy sử dụng rbenv hoặc RVM để quản lý một Ruby riêng biệt. Điều này được bao phủ nhiều lần trên Stack Overflow.
Tin Man

Bạn đã thử gỡ cài đặt xz trước khi cài đặt nokogiri chưa?
lifeisfoo

Câu trả lời:


237

Tôi gặp vấn đề tương tự. Thật không may, " Cài đặt Nokogiri " không bao gồm các vấn đề về Iconv. Đây là cách tôi giải quyết vấn đề.

Đầu tiên cài đặt homebrew , nó sẽ làm cho cuộc sống của bạn dễ dàng hơn. Nếu bạn đã cài đặt nó, hãy chắc chắn lấy các công thức mới nhất bằng cách cập nhật như sau:

brew update

Lưu ý : Trong OSX 10.9+, bạn có thể cần cài đặt các công cụ lệnh xCode để cho phép bạn cài đặt libiconv.

xcode-select --install

sau đó cài đặt phiên bản libiconv mới hơn

brew install libiconv

sau đó cài đặt đá quý của bạn

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

5
Khi tôi đã thực hiện "brew install libiconv" và "brew link libiconv", tôi đã có thể cài đặt nokogiri thành công. Tôi hy vọng điều đó có nghĩa là tôi không phụ thuộc nhiều vào phiên bản cụ thể của libiconv được cài đặt bởi brew.
Steven Chanin

87
Khi tôi thử, brew install libiconvnó sẽ xuất hiện: Lỗi: Không có công thức khả dụng cho libiconv Apple phân phối libiconv với OS X, bạn có thể tìm thấy nó trong / usr / lib. Một số tập lệnh xây dựng không phát hiện chính xác, vui lòng kiểm tra các công thức hiện có để tìm giải pháp.
Seth Bro

62
Nếu bạn đang chạy Mavericks, bạn có thể cần cài đặt các công cụ dòng lệnh của Xcode : xcode-select --install. Điều này đã khắc phục vấn đề cho tôi.
Michael Stalker

34
Nếu bạn vẫn không thể có brew install libiconvđược công thức phù hợp, hãy sử dụng công thức này:brew tap homebrew/dupes
jamesdlivesinatree

15
OS X Yosemite(10.10) Tôi không phải làm việc brewđó; chỉ xcode-select --installkhắc phục vấn đề này cho tôi.
bjfletcher

84

Hãy thử sử dụng các thư viện hệ thống. OSX đi kèm với libiconv trong các phiên bản mới hơn, nhưng tập lệnh cài đặt mặc định dường như có vấn đề

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

Chỉnh sửa: Nếu sử dụng gói, như Geoff đã đề cập, bạn có thể thực hiện:

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

5
Nếu sử dụng bundler - bạn có thể chạy "bundle config build.nokogiri --use-system-library"
Geoff Evason

1
cuối cùng "gói cấu hình build.nokogiri --use-system-library" đã hoạt động. Tôi ghét khi điều đó xảy ra
nils petersohn

1
Làm việc cho tôi trên Mac OS 10.10 Yosemite.
Lloyd Dewolf

Tại sao tôi cần thêm "-" ở giữa lệnh cài đặt gem?
Rembrandt Q. Einstein

3
Thất bại cho tôi vào ngày 10.10.3. Xcode 6.3 với libxml2 version 2.6.21 or later is required!.
Rivera

36

Giải pháp của @ Cory chứa câu trả lời đúng, nhưng giải pháp trên Mavericks thực sự đơn giản hơn nhiều so với giải pháp hàng đầu nên tôi đang đăng lại chỉ với các bước cần thiết.

Trên Mavericks (OSX 10.9+):

Cài đặt công cụ dòng lệnh Xcode:

xcode-select --install

sau đó cài đặt đá quý của bạn:

gem install nokogiri

4
Hoạt động trên Yosemite. Rất vui vì tôi đã cuộn xuống và không sử dụng các câu trả lời cũ hơn.
yuяi

tiết kiệm thời gian lớn, cảm ơn cho mẹo này! làm việc say mê với tôi trên mavericks
kem

Bạn đã thử sử dụng giải pháp của tôi? Nó không yêu cầu đặt mã xcode.
Filip Kis

Đây là giải pháp chính thức từ các tài liệu Nokogiri ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ) và là giải pháp duy nhất hoạt động trên El Capitan. Các giải pháp được chấp nhận đã không làm việc ở đó.
Johannes

Làm việc cho tôi trên El Capitan, rất tức giận. Cảm ơn liên kết đến tài liệu Nokogiri @Johannes - thực sự hữu ích. Mọi người nên tránh xa các giải pháp nói "sử dụng thư viện hệ thống" - lời khuyên tồi.
Phần Lan

19

Cuối cùng tôi đã có thể giải quyết vấn đề này. Không có giải pháp nào ở trên hoàn toàn cố định nó cho tôi.

Tôi đã gặp lỗi này khi thử gem install nokogiritrên OSX Lion 10.7.2. Trước hết, lỗi này che giấu vấn đề thực sự bằng cách nói libiconv bị thiếu, bởi vì bạn sẽ gặp lỗi tương tự ngay cả khi nokogiri không thể tìm thấy libxslt hoặc libxml2, trong trường hợp của tôi, nó không thể.

Vì vậy, tôi đã làm theo các hướng dẫn trên http://nokogiri.org/tutorials/installing_nokogiri.html trong phần Homebrew (được sửa đổi một chút để tính đến phiên bản libxml2 mới hơn):

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

Lúc này tôi đi theo chỉ dẫn trên trang nokogiri và thử

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

Tuy nhiên, điều này vẫn thất bại vì khi xây dựng libxslt từ nguồn, nó sẽ cài đặt /includethư mục ở một nơi thú vị. Vì vậy, bạn cần chỉ định riêng libincludecác thư mục như vậy:

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

Điều này vẫn không hoạt động (cùng một lỗi libiconv), vì vậy tôi đã cố gắng chỉ định cả ba thư viện bắt buộc (libxslt, libxml2 và 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

Bây giờ tôi đã có một lỗi khác! Đó vẫn là một lỗi nhưng ít nhất nó đã khác. Quá trình thực hiện không thành công với:

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

À, cái gì? Sau rất nhiều lần googling, tôi đã xem qua bài đăng kỳ diệu này: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -ngành kiến ​​trúc/

Rõ ràng OSX Lion xuất xưởng với một số phiên bản xấu của thư viện libz ( libz.dylib, libz.1.dylib, libz.1.2.4.dylib) và chúng cần được thay thế bằng các phiên bản mới nhất từ ​​Xcode SDK. Bài viết giải thích nó tốt hơn tôi có thể đọc các liên kết ở trên để được hướng dẫn cụ thể.

Khi những thứ này được thay thế, tôi chạy

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

một lần nữa và tất cả đều tốt Tôi mong điều này giúp được người nào khác.


Tôi đã có cùng một vấn đề, nhưng tôi thấy việc xóa các tệp sau khỏi opt / local / lib: libz.dylib và libz.1.dylib và làm theo các hướng dẫn còn lại đã thực hiện thủ thuật này.
Undistraction

1
Tôi nghĩ / opt / local biểu thị cài đặt MacPorts. Nếu bạn đang chạy homebrew và Macports, bạn sẽ kết thúc với một chút buồn cười (như đã thấy trong trường hợp của bạn). Giải pháp tốt nhất là gỡ cài đặt Macports và sử dụng homebrew cho trình quản lý gói của bạn.
Cory

Tôi đã thêm một giải pháp đơn giản mới cho Mavericks (OSX 10.9+) bên dưới.
Micah Winkelspecht

17

Chỉ cần thêm giọng nói của tôi vào đám đông, nhưng mkmf.log đã nói điều gì đó về việc không thể tìm thấy biểu tượng cho kiến ​​trúc x86_64. Tôi tình cờ tìm thấy giải pháp này:

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

Có thể không giải quyết bất cứ điều gì cho người hỏi ban đầu, nhưng điều này có thể giúp một ai đó.

Lưu ý bên lề: nokogiri là rào cản cao nhất của tôi khi sử dụng các ứng dụng ruby. Mỗi khi ai đó phụ thuộc vào một phiên bản khác nhau, tôi phải tìm ra cách xây dựng nó. Và vấn đề của tôi là khác nhau mỗi lần.


1
Đồng ý với tình cảm nokogiri của bạn. Mỗi. Độc thân. Thời gian.
jbnunn

Không làm việc cho tôi theo hình thức này, nhưng ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librarieslàm việc ...
bwoebi

Điều này cũng hiệu quả với tôi, giải pháp dễ dàng hơn nhiều, tôi đã không sử dụng ARCHFLAGS, chỉ cần cài đặt sudo gem nokogiri - --use-system-
library

8

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

điều này làm việc cho tôi trên macos. Nó cũng hoạt động với phiên bản1.6.6.4


Làm việc mà không có --with-xml2-includetùy chọn cho tôi trên Catalina ... gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
ryanc

6

Tôi đang sử dụng .. OS X 10.9.4 Homebrew 0.9.4

Đây là bản tóm tắt của tôi từ chủ đề này để cài đặt thành công nokogiri, sửa lỗi libiconv bị thiếu.

Cài đặt Homebrew http://brew.sh/ Hoặc cập nhật lên lệnh mới nhất bằng cách sử dụng bên dưới

brew update

Cài đặt libxml2 libxslt

brew install libxml2 libxslt

Liên kết cả libxml2 libxslt

brew link libxml2 libxslt

Nếu bạn nhận được cảnh báo để sử dụng - Force, chỉ cần sử dụng lệnh bên dưới

brew link --force libxml2 libxslt

Cài đặt công cụ lệnh xCode để cho phép bạn cài đặt libiconv

xcode-select --install

Cài đặt 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

Bước cuối cùng, cài đặt 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

Tôi đã giải quyết điều này khi Yosemitechạy Ruby 2.1.4bằng

  1. đảm bảo bạn đã cài đặt xCode 6.1, sau đó
  2. xcode-select --install, sau đó
  3. Trong AppStore, nhấp vào các bản cập nhật và cài đặt phiên bản mới nhất của các công cụ dòng lệnh (dường như xcode-select --installkhông làm được - thở dài)
  4. sau đó bundle installlàm việc như bình thường

Tôi cũng đã làm một brew install libiconvnhưng tôi không tin rằng bước đó là cần thiết.


Tôi không tin brew install libiconvlà cần thiết - tôi không bao giờ bận tâm tìm gói phù hợp và điều này hoạt động tốt với tôi. Cấp, nó có thể đã có trên máy của tôi từ khi tôi cài đặt nokogiri với ruby ​​2.1.1 trước đó.
jmstone617

"Trong AppStore, nhấp vào các bản cập nhật và cài đặt phiên bản mới nhất của các công cụ dòng lệnh (mà rõ ràng là xcode-select --install không làm - thở dài)" - không có bản cập nhật nào. Làm cách nào để cập nhật các công cụ dòng lệnh của tôi từ Xcode? Chúng không hiển thị trong phần "Tải xuống" của ngăn tùy chọn.
chadoh

Điều này làm việc cho tôi mà không cần đến cửa hàng ứng dụng. Tôi đã cập nhật các công cụ dòng lệnh và HĐH (lên Yosemite), sau đó chạy xcode-select --installvà tôi đã có thể cài đặt Nokogiri.
thép

Tôi phải làm: xcode-select --install .. brew install libxml2 .. bundle config build.nokogiri --use-system-library .. bundle install
Zack Burt

4

Tôi đã thử nhiều thứ nhưng không có gì làm việc cho tôi. Sau đó tôi cuối cùng đã tìm thấy tài liệu iconv và nó đã cứu ngày của tôi!


Cảm ơn rất nhiều. Nó đã cứu ngày của tôi quá.
pisaruk

3

Nhìn vào tệp mkmf, tôi thấy rằng nokogiri (hoặc đá quý, tôi không biết) cố gắng tìm các phụ thuộc trong / op / local /. Đối với tôi nó không phải là con đường đúng để tìm kiếm chúng.

Buộc nokogiri tìm libs ở đúng nơi (tôi sử dụng homebrew) đã lừa tôi:

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

Có lẽ có một cái gì đó để sửa trong nokogiri ...

HTH


3

libiconv đã bị xóa khỏi Homebrew 0.9 Bây giờ, bạn nên biên dịch libiconv từ nguồn, sau đó tham khảo cài đặt khi bạn cài đặt đá quý nokogiri. Xem hướng dẫn cài đặt Nokogiri trong phần Homebrew 0.9 trên trang cài đặt Nokogiri


Kể từ hôm nay, tôi đã có thể chạy $ brew install libiconv và nó đã tải xuống và cài đặt libiconv-1.14.tar.gz
Phát triển

2

Tìm trong tệp mkmf.log trong thư mục bản dựng của gem (ví dụ: / L Library / Glo / Grems / 1.8 / gems / nokogiri-1.4.4 / text / nokogiri / mkmf.log). Điều đó có nhiều thông tin hơn. Trong trường hợp của tôi khi tôi nhấn nó, đó là Nokogiri đặc biệt thêm / opt / local / lib vào đường dẫn tìm kiếm thư viện và GNU Backgammon đã cài đặt một libiconv không tương thích ở đó.


2

Giả sử bạn đã cài đặt libxml2 và libxslt với MacPorts, thì bạn vẫn có thể gặp lỗi này do không khớp với thứ tự bao gồm các đường dẫn và đường dẫn liên kết được sử dụng bởi lệnh gọi tới have_func ('iconv_open', 'iconv.h')

Giải pháp đơn giản (vá): xóa libiconv. * In / usr / local / lib


Tôi đã cài đặt libxml2 và libxslt với MacPorts, nhưng không có tệp libiconv. * Trong / 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/

tương tự như trên, đây là giải pháp cho homebrew và sử dụng gem install (áp dụng thay đổi tùy thuộc vào phiên bản của bạn)

tuy nhiên, nếu bạn sử dụng Gemfile và cài đặt gói, bạn nên áp dụng cấu hình gói trước khi cài đặt, ở đây mã

$ 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

một lần nữa, áp dụng thay đổi tùy thuộc vào phiên bản của bạn

Hy vọng điều này sẽ giúp bạn.

tín dụng: https://gist.github.com/1344331


2

Tôi gặp rắc rối tương tự trên Mountain Lion. Hóa ra tôi đã cài đặt libiconv qua gói rvm trước đây và điều này không còn cần thiết cho ruby ​​1.9.3 / Mountain Lion / nokogiri.

Theo lời khuyên của https://rvm.io/packages/ , tôi đã xóa thư mục $ rvm_path / usr của mình và xây dựng lại ruby ​​1.9.3. Sau đó, cài đặt nokogiri là một cài đặt đá quý đơn giản. Không gây rối với cài đặt brew / macports / thủ công!


2

Bạn cũng có thể làm điều này trên Mavericks:

gem install nokogiri - --use-system-library = true --with-xml2-include = / Ứng dụng / Xcode.app / Nội dung / Nhà phát triển / Nền tảng / MacOSX.pl platform / Developer / SDKs / MacOSX10.9.sdk / usr / bao gồm / libxml2

Chỉ cần chắc chắn rằng bạn đã cài đặt xcode


giải pháp tương tự cũng hoạt động cho 10.7.5: gem install nokogiri - --use-system-library = true --with-xml2-include = / Application / Xcode.app / Content / Developer / Platforms / MacOSX.pl platform / Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
tolginho

2

Tôi đã chiến đấu với Nokogiri một lúc hôm nay trên OS X 10.10 Yosemite

Môi trường của tôi đã bị rối tung vì một số lý do.

which bundlewhich gemđã cho tôi /usr/bin/bundle/usr/bin/gemthay vì~/.rbenv/shims/gem

Điều gì đã giúp sửa nó cho tôi là sudo rm -i /usr/bin/gem /usr/bin/bundle

Sau đó tôi: 1. chuyển trở lại thư mục dự án của tôi 2. gỡ cài đặt phụ thuộc 3. (cài đặt lại) libs phụ thuộc: đã brew install libxml2 libiconv libxslt cài đặt 4. phiên bản ruby ​​của tôi mới (với rbenv) 5. đã gem install bundler 6. và bundle installchạy mà không cần bất kỳ các vấn đề.

Nokogiri đã ổn sau đó

Để tham khảo:

╰─% 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
Trong nhận thức muộn (luôn luôn là 20/20) có lẽ tôi chỉ cần điều chỉnh biến env PATH của mình để trả trước rbenv trước.
Sam Figueroa

1

Bạn cần nâng cấp homebrew của mình lên 0,9

sau đó làm theo các bước sau

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

Bạn nên kiểm tra lại phiên bản thư viện thư mục.


Liên kết và sudo sẽ phá vỡ mọi thứ. Chúng chỉ là một vài lý do. Sử dụng công thức pha cà phê vì có cách dễ dàng hơn để duy trì. brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv

1

NGƯỜI DÙNG NHÀ

Giải pháp chính xác để khắc phục sự cố này nếu bạn đang sử dụng homebrew:

xcode-select --install

Chọn "Nhận Xcode" từ hộp thoại.

brew unlink libiconv
gem install nokogiri

Bước chọn xcode sửa lỗi cài đặt Xcode của bạn và cài đặt Xcode Command Line Utils. Tôi thấy rằng tôi đã không có /usr/include/iconv.h do một số vấn đề với việc nâng cấp O / S hoặc khôi phục từ bản sao lưu. Nếu bạn không có tệp tiêu đề đó và /usr/lib/libconv.dylib sau khi chạy xcode-select thì rất có thể bạn cần kéo Xcode từ thư mục Ứng dụng vào thùng rác và cài đặt lại, sau đó tải xuống Công cụ dòng lệnh cho Xcode theo cách thủ công từ https://developer.apple.com/doads/index.action và cài đặt nó.

Sau đó, bạn cần hủy liên kết libiconv từ homebrew. Bạn không cần điều này. Và clang thực sự sẽ chọn /usr/local/include/iconv.h qua /usr/include/iconv.h và sẽ #define iconv_open tới libiconv_open nhưng sau đó liên kết với /usr/lib/libiconv.dylib mà không có libus là nguyên nhân khiến các mkmf thất bại trong việc tìm libiconv. Những gì bạn cần làm là xóa liên kết trong iconv.h để nokogiri không tìm thấy nó.

Sau đó, chỉ cần xây dựng nokogiri bình thường.

Đối với người dùng mới, tất cả những gì bạn cần làm là cài đặt xcode với xcode-select và cài đặt nokogiri, nhưng nếu bạn đã tìm thấy câu hỏi này thì có lẽ bạn đã cài đặt bị lỗi và không phải là bản cài đặt Mavericks mới.

Một số câu trả lời khác ở đây chắc chắn không chính xác. Hầu hết trong số họ cố gắng sử dụng libiconv từ homebrew, điều này hoàn toàn không cần thiết. Các câu trả lời brew link libiconvthực sự gây ra vấn đề trong đó clang trở nên bối rối và cố gắng đọc tệp tiêu đề homebrew và liên kết với các thư viện hệ thống. Các câu trả lời gợi ý --use-system-librarieslà kém vì nokogiri cần được liên kết với các thư viện libxml2 và libxslt kèm theo vì các phiên bản khác của các thư viện đó không tương thích với nó. Các câu trả lời muốn bạn biên dịch từ các nguồn chỉ là vô cùng phức tạp.

TL; DR:

  • Nâng cấp và / hoặc sửa chữa cài đặt Xcode của bạn
  • Hủy liên kết libiconv homebrew của bạn kể từ khi cố gắng sử dụng chỉ gây ra vấn đề
  • Xây dựng nokogiri bình thường

NGƯỜI SỬ DỤNG RVM

Các bản cài đặt RVM cũ có thể có một libiconv ẩn trong các thư mục rvm của bạn ở đâu đó đang xung đột với các thư viện hệ thống của bạn. Xem https://stackoverflow.com/a/11809261/506908 để biết thêm thông tin.

NGƯỜI SỬ DỤNG MacPorts

Nếu bạn có /opt/local/lib/libiconv.dylib thì nokogiri sẽ thêm đường dẫn đó vào danh sách các thư mục mà nó tìm kiếm và nó sẽ tìm thấy bản cài đặt MacPorts tương tự như cách nó nhặt libiconv homebrew và xung đột với các thư viện hệ thống. Bạn co thể thử:

sudo port uninstall libiconv

Nếu điều đó không thành công do phụ thuộc thì bạn có thể thử liên kết trực tiếp với phiên bản MacPorts (chưa được kiểm tra):

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

Xác nhận gem install nokogiri -- --with-iconv-dir=/opt/localhoạt động tốt với MacPorts libiconvđược cài đặt
PartialOrder

1

Cái này làm việc cho tôi

sudo env ARCHFLAGS = "- arch x86_64" gem install nokogiri: 1.6.6.2 - --use-system-library --with-xml = / usr / local / Cellar / libxml2 / 2.9.3 / --with-iconv- dir = / usr / local / Hầm / libiconv / 1.14


đó là sự kết hợp của --use-system-library và --with-iconv-dir đã làm điều đó cho tôi
aaaarrgh

0

Tôi đã gặp phải điều này, sáng nay ... sau khi nâng cấp lên Mavericks. Chúng tôi đã làm nhiều việc. Tuy nhiên nếu bất cứ ai gặp vấn đề này thì đây là một số điều cần thử.

Tôi đã chạy 'xcode-select --install' sau đó đã cài đặt các công cụ dòng lệnh (điều ngạc nhiên là điều này không cập nhật trên hệ điều hành xấu). Tôi đã chạy 'rvm implode' (tôi sẽ xây dựng lại sau).

Chúng tôi đã ghép hai tệp đầu ra lỗi:

~ / .vagrant.d / đá quý / đá quý / nokogiri-1.6.3.1 / ext / nokogiri / gem_make.out

~ / .vagrant.d / gem / gem / nokogiri-1.6.3.1 / ext / nokogiri / tmp / x86_64-apple-darwin12.5.0 / cổng / libxml2 / 2.8.0 / configure.log

Dường như chỉ ra rằng trình biên dịch c đang sử dụng một thiết lập đáng ngạc nhiên.

Tôi đã chạy 'env'

Đầu ra chứa:

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

Những tệp này không tồn tại trên hệ thống tệp ...

Sau khi tất cả những thay đổi này chuyển sang một cửa sổ đầu cuối mới (vì vậy mọi thứ đều mới mẻ). Cài đặt vagrant-berkshelf (lần lượt cài đặt nokogiri) hoạt động tốt.

LƯU Ý: khi chạy 'env' trong cửa sổ mới, không còn cài đặt cho CC hoặc CXX ...

Không chắc chắn về phần quan trọng của vấn đề này, hoặc nếu vấn đề trật tự, nhưng đã cố gắng tạo lại những phần dường như đóng vai trò trong việc làm cho điều này hoạt động.


Bạn có chắc chắn rằng lệnh gem install nokogirithành công? Héo với thông báo "đã được cài đặt" hoặc cài đặt thành công?
Spundun

Đúng. Tôi đã cài đặt lại rvm và oh-my-zsh khi tôi xây dựng mọi thứ sao lưu trên máy Mac của mình. Những gì tôi chưa thể tìm ra là làm thế nào để cài đặt nokogiri trên một viên đá quý rvm. Khi tôi chuyển trở lại 'rvm sử dụng hệ thống', tôi có thể cài đặt nokogiri 1.6.3.1 trên 1.5.6 đi kèm với OS X ruby ​​2.0.0p451.
aaron blythe

Cuối cùng, đối với tôi, đó là stackoverflow.com/questions/19643153/ bia ủ gỡ cài đặt apple-gcc42 brew cài đặt apple-gcc42
aaron blythe

0

Theo tài liệu, kể từ OSX 10.9 và Homebrew 9.5+, có lẽ bạn đang thiếu các công cụ phát triển.

Cài đặt Nokogiri

Xử lý sự cố

Nếu bạn gặp vấn đề khi đề cập libiconv bị thiếu trông giống như thế này:

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 ***

Sau đó, bạn có thể đang thiếu các công cụ phát triển đúng. Đây là một sửa chữa thực sự dễ dàng:

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

Điều này được xác minh làm việc trên trình biên dịch clang của OSX 10.9 w / xcode.


0

Tôi gặp vấn đề này khi nâng cấp hệ điều hành Mac lên Yosemite. Tôi đã có thể giải quyết vấn đề này bằng cách làm:

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

0

Tôi đã có một vấn đề tương tự và câu trả lời được chấp nhận được sử dụng để làm việc cho tôi. Bây giờ, tuy nhiên tôi đã thấy một thông báo lỗi mới trong đó một gmkdirlệnh bị thiếu như trong câu hỏi này:

cài đặt gem nokogiri -v '1.5.11' không thành công do thực hiện: / usr / local / bin / gmkdir: Không có tệp hoặc thư mục như vậy

Những gì làm việc cho tôi là lần đầu tiên dọn dẹp một chút:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

Và sau đó brew unlink libiconvvà bất cứ điều gì khác bạn cần hủy liên kết (kiểm tra với brew doctor). Sau đó, phép thuật hai dòng (được sao chép từ câu trả lời được liên kết):

brew install coreutils
gem install nokogiri

0

Các bước đơn giản để làm theo trước khi bạn bắt đầu gỡ cài đặt và cài đặt bất cứ thứ gì. Kiểm tra xem bạn đã cài đặt CLT chưa (công cụ dòng lệnh):

brew config

xem phiên bản CLT tại đây nếu nó được cài đặt không cần cài đặt lại.

Điều này có nghĩa là vấn đề là với sự cho phép bạn đã cài đặt lại chỉ gem gemler làm cho nó không sudo. Gỡ gem uninstall bundler cài đặt gói với trình cài đặt lại gem gem gem install bundler

Điểm quan trọng nhất ở đây là sự cho phép theo đó trình cài đặt gem gem không bao giờ bị sudo.


-1

Trước hết, hãy đảm bảo bạn làm theo hướng dẫn cài đặt trên nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

Sau khi làm theo hướng dẫn tôi vẫn có vấn đề này. Đây là cách tôi giải quyết nó:

Trước hết tôi đã cài đặt iconv bằng homebrew: brew install iconv

Sau đó, tôi gỡ cài đặt ruby, may mắn là điều này rất dễ dàng với rvm:

rvm uninstall 1.9.2        

Sau đó, tôi đã phải cài đặt lại ruby ​​với các tùy chọn sau:

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

Sau đó, tôi tạo ra một viên đá quý với phiên bản ruby ​​mới:

rvm use 1.9.2@coolproject

Sau đó tôi cuối cùng cũng có thể cài đặt nokogiri như thế này:

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

Trong trường hợp của tôi, (như với scotchi), bản dựng không thành công do thư viện iconv không tương thích trong / opt / local / lib. Theo mặc định, quá trình xây dựngNokogiri nhìn vào / opt / local trước tiên. Để buộc nó sử dụng một thư mục cài đặt khác, ví dụ / usr / local, hãy:

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

Bài đăng blog này đề xuất để cài đặt libiconv bằng tay.

Sau đó, nokogiri có thể được cài đặt với một số công tắc cho biết nơi tìm libiconv (xem bài đăng trên blog).

Như một lưu ý phụ: Sau khi cài đặt nokogiri, tôi đã quản lý để cài đặt gollum (cài đặt cũng thất bại vì không thể tìm thấy iconv). Bây giờ tôi vẫn phải đối mặt với các vấn đề, bởi vì khi tôi khởi động gollum, Python gặp sự cố.


-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*

LƯU Ý tệp MISSING /lib/iconv/iconv.so trong 2.0.0-p247 có trong cài đặt đá quý 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'

Sao chép tập tin qua

$ 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/

BÂY GIỜ LÀM VIỆC!

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

Lưu ý: Tôi đang làm việc với rbenv, nhưng vấn đề này là dành riêng cho việc cài đặt đá quý và nó sẽ được sửa chữa theo luồng!
Darren Weber

câu trả lời này không liên quan gì đến thư viện C libiconv mà bản dựng của nokogiri phụ thuộc vào. câu trả lời nên thực sự được loại bỏ.
lamont

-1

Tôi đã phải cài đặt gcc trước khi chạy ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

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.