Почему не удается установить Nokogiri в Mac OS, а libiconv отсутствует? - PullRequest
150 голосов
/ 03 апреля 2011

Я пытался установить 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 с использованием brew и сборку libiconv из исходных кодов (как описано в « Установка Nokogiri »), ошибка остается той же.

При попытке запустить установку для Nokogiri, libxml2 и libxslt кажутся подходящими, но не libiconv.

Кто-нибудь, кто лучше знает эти вещи, знает, как установить Nokogiri?1010 *

Ответы [ 32 ]

229 голосов
/ 28 мая 2011

У меня была такая же проблема. К сожалению, « Установка Nokogiri » не охватывает проблемы Iconv. Вот как я решил проблему.

Сначала установите homebrew , это облегчит вашу жизнь. Если он уже установлен, обязательно загрузите последние формулы, обновив их так:

brew update

Примечание : в OSX 10.9+ вам может понадобиться установить инструменты команд xCode, чтобы позволить вам установить libiconv.

xcode-select --install

затем установите более новую версию libiconv

brew install libiconv

затем свяжите свои новые библиотеки iconv:

brew link libiconv

затем установите свой драгоценный камень

gem install nokogiri -- --with-iconv-dir=/usr/local/Cellar/libiconv/1.14
76 голосов
/ 10 июля 2014

Попробуйте использовать системные библиотеки. OSX поставляется с libiconv в более новых версиях, но, похоже, проблема в скрипте установки по умолчанию

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

Редактировать: Если вы используете упаковщик, как указано Geoff , вы можете сделать:

bundle config build.nokogiri --use-system-libraries
36 голосов
/ 29 августа 2014

@ Решение Кори содержит правильный ответ, но решение на Mavericks на самом деле намного проще, чем топовое решение, поэтому я делаю репост только с необходимыми шагами.

На Mavericks (OSX 10.9 +):

Установить Xcode Tools для командной строки:

xcode-select --install

затем установите свой драгоценный камень:

gem install nokogiri
19 голосов
/ 30 ноября 2011

Мне наконец удалось решить эту проблему. Ни одно из вышеперечисленных решений полностью не исправило это для меня.

Я получал эту ошибку при попытке gem install nokogiri на OSX 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

В этот момент я следовал инструкциям на сайте нокогири и попробовал

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

Теперь я получил другую ошибку! Это все еще была ошибка, но, по крайней мере, она была другой. Процесс make завершился неудачно с:

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

Э-э, что? После долгих поисков я наткнулся на этот чудо-пост: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required-architecture/

Очевидно, 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

снова и все было хорошо. Я надеюсь, что это помогает кому-то еще.

14 голосов
/ 28 ноября 2014

Просто добавляю свой голос в толпу, но mkmf.log что-то сказал о невозможности найти символы для архитектуры x86_64. Я наткнулся на это решение:

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

Может ничего не решить для оригинального аскера, но это может кому-то помочь.

Примечание: nokogiri - мой самый высокий барьер на пути использования приложений ruby. Каждый раз, когда кто-то зависит от другой версии, я должен выяснить, как ее создать. И моя проблема каждый раз разная.

6 голосов
/ 22 августа 2014

Я использую .. 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

Если вы получаете предупреждение об использовании --force, просто используйте команду ниже

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 голосов
/ 29 октября 2014

Я решил это на Yosemite, запустив Ruby 2.1.4 на

  1. , убедитесь, что у вас установлен xCode 6.1, затем
  2. xcode-select --install, затем
  3. Inв AppStore нажмите updates и установите самую последнюю версию инструментов командной строки (что, очевидно, xcode-select --install не делает - вздохните)
  4. , тогда bundle install работало как обычно.

Я тоже сделал brew install libiconv, но я не уверен, что шаг был необходим.

4 голосов
/ 20 сентября 2011

Я пробовал много вещей, но у меня ничего не получалось. Тогда я наконец нашел документацию iconv , и это спасло мой день!

3 голосов
/ 13 апреля 2012

libiconv был удален из Homebrew 0.9 Теперь рекомендуется скомпилировать libiconv из исходного кода, а затем ссылаться на установку при установке гема nokogiri. См. Инструкции по установке Nokogiri в разделе Homebrew 0.9 на странице установки Nokogiri

3 голосов
/ 21 апреля 2011

Глядя в файл mkmf, выясняется, что nokogiri (или gem, я не знаю) пытается найти зависимости в / op / local /.Для меня это не правильный путь для их поиска.

Заставить nokogiri найти либов в нужном месте (я использую доморощенный) сделал для меня хитрость:

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

...