Почему не удается установить 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 ]

2 голосов
/ 04 августа 2012

У меня была похожая проблема на Горном льве. Оказывается, я установил libiconv через пакет rvm ранее, и это больше не нужно для ruby ​​1.9.3 / Mountain Lion / nokogiri.

Следуя совету https://rvm.io/packages/,, я удалил каталог $ rvm_path / usr и перестроил ruby ​​1.9.3. После этого установка nokogiri была простой установкой драгоценного камня. Никаких проблем с установкой brew / macports / source!

2 голосов
/ 19 декабря 2011
$ 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 install, вы должны применить конфигурацию bundleперед установкой, здесь код

$ 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 голосов
/ 14 июня 2011

Предполагая, что вы установили libxml2 и libxslt с MacPorts, вы все равно можете получить эту ошибку из-за несоответствия порядка включаемых путей и путей ссылок, используемых при вызове have_func ('iconv_open', 'iconv.h')

Простое (исправление) решение: удалите libiconv. * В / usr / local / lib

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

Просмотрите файл mkmf.log в каталоге сборки гема (например, /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log). Это имеет гораздо больше информации. В моем случае, когда я нажал эту кнопку, Nokogiri специально добавил / opt / local / lib к пути поиска в библиотеке, а нарды GNU установили там несовместимую libiconv.

2 голосов
/ 04 ноября 2014

Сегодня я некоторое время боролся с Нокогири на OS X 10.10 Yosemite

По какой-то причине мое окружение испортилось.* и /usr/bin/gem вместо ~/.rbenv/shims/gem

Что помогло исправить это для меня было sudo rm -i /usr/bin/gem /usr/bin/bundle

После этого я: 1. переключился обратно в каталог моего проекта 2. удалил зависимый 3(re) -установил зависимые библиотеки: сделал brew install libxml2 libiconv libxslt 4. установил мою свежую версию ruby ​​(с 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
2 голосов
/ 14 августа 2014

Вы также можете сделать это на Mavericks:

gem install nokogiri - --use-system-library = true --with-xml2-include = / Applications / Xcode.app / Contents / Developer /Платформы / MacOSX.platform / Developer / SDKs / MacOSX10.9.sdk / usr / include / libxml2

Просто убедитесь, что у вас установлен xcode

1 голос
/ 24 января 2016

Этот работал для меня

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 / местные / Подвал / libiconv / 1.14

1 голос
/ 02 сентября 2014

ПОЛЬЗОВАТЕЛИ HOMEBREW

Правильное решение этой проблемы, если вы используете homebrew:

xcode-select --install

Выберите «Get Xcode» в диалоговом окне.

brew unlink libiconv
gem install nokogiri

Шаг xcode-select исправляет вашу установку Xcode и установку утилит командной строки Xcode.Я обнаружил, что у меня не было /usr/include/iconv.h из-за какой-то проблемы с обновлениями O / S или восстановлений из резервных копий.Если у вас нет этого файла заголовка и /usr/lib/libconv.dylib после запуска xcode-select, вам, скорее всего, нужно перетащить Xcode из папки приложения в корзину и переустановить, а затем вручную загрузить инструменты командной строки для Xcodeот https://developer.apple.com/downloads/index.action и установите его.

Затем вам нужно отсоединить libiconv от homebrew.Тебе это не нужно.И clang на самом деле подберет /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 из доморощенного, что совершенно не нужно.Ответы, которые brew link libiconv на самом деле вызывают проблему, когда clang запутывается и пытается прочитать файл заголовка доморощенного и связать с системными библиотеками.Ответы, которые предполагают --use-system-libraries, плохие, потому что nokogiri нужно связать со своими связанными библиотеками libxml2 и libxslt, потому что другие версии этих библиотек несовместимы с ним.Ответы, требующие компиляции из источников, просто безнадежно чрезмерно сложны.

TL; DR:

  • Обновите и / или восстановите установку Xcode
  • Отключите связьhomebrew libiconv, поскольку попытка его использования вызывает только проблемы
  • Сборка nokogiri обычно

RVM USERS

В старых установках RVM может быть скрыто libiconvв ваших каталогах rvm, которые конфликтуют с вашими системными библиотеками.См. https://stackoverflow.com/a/11809261/506908 для получения дополнительной информации.

ПОЛЬЗОВАТЕЛИ MacPorts

Если у вас есть /opt/local/lib/libiconv.dylib, то nokogiri добавляет этот путь ксписок каталогов, которые он ищет, и он обнаружит, что установка MacPorts похожа на то, как он запускает библиотеку libbonv для homebrew и конфликтует с системными библиотеками.Вы можете попробовать:

sudo port uninstall libiconv

Если это не удается из-за зависимостей, тогда вы можете попробовать напрямую связать версию MacPorts (не проверено):

gem install nokogiri -- --with-iconv-dir=/opt/local
1 голос
/ 09 апреля 2013

Вам необходимо обновить домашний напиток до 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

Необходимо дважды проверить версию библиотеки папок.

0 голосов
/ 23 августа 2011

Прежде всего, убедитесь, что вы следуете руководству по установке на nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

После следования руководству у меня все еще была эта проблема.Вот как я решил это:

Сначала я установил iconv с помощью homebrew: brew install iconv

Затем я удалил ruby, к счастью, это очень просто с rvm:

rvm uninstall 1.9.2        

Затем мне пришлось переустановить ruby ​​со следующими параметрами:

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

Затем я создаю гемсет с новой версией ruby:

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