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

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

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

polarblau
источник
Вы не показываете точные команды, которые вы пытаетесь использовать, поэтому мы будем стрелять в темноте, пытаясь ответить. Я всегда использую gem install nokogiri, но затем я использую RVM для управления установками Mac OS Ruby. libxml и libxslt не имеют отношения к iconv, поэтому я бы порекомендовал задать ваш вопрос на Nokogiri-talk, который является их форумом поддержки. Я не помню, чтобы у меня возникали какие-либо проблемы с иконками при установке 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для установки гемов или изменения Ruby по умолчанию. Вместо этого используйте rbenv или RVM для управления отдельным Ruby. Это покрыто несколько раз на переполнение стека.
Железный Человек
Вы пытались удалить 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
Cory
источник
5
После того, как я выполнил "brew install libiconv" и "brew link libiconv", я смог успешно установить nokogiri. Я надеюсь, что это означает, что у меня нет жесткой зависимости от конкретной версии libiconv, установленной brew.
Стивен Чанин
87
Когда я пытаюсь brew install libiconvэто выплюнуть: Ошибка: Нет доступной формулы для libiconv Apple распространяет libiconv с OS X, вы можете найти ее в / usr / lib. Некоторые сценарии сборки не могут правильно определить его, пожалуйста, проверьте существующие формулы для решений.
Сет Бро
62
Если вы работаете Mavericks, возможно , потребуется установить средства командной строки XCode в: xcode-select --install. Это решило проблему для меня.
Майкл Сталкер
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

Изменить: Если вы используете упаковщик, как упомянуто Джеффом, вы можете сделать:

bundle config build.nokogiri --use-system-libraries
Филип Кис
источник
5
Если вы используете bundler - вы можете запустить "bundle config build.nokogiri --use-system-library"
Джефф Эвасон
1
наконец-то "пакетная конфигурация build.nokogiri --use-system-library" сработала. Я ненавижу, когда это случается
Нильс Петерсон
1
У меня работал на Mac OS 10.10 Yosemite.
Ллойд Дьюольф
зачем мне нужен дополнительный "-" в середине команды gem install?
Рембрандт Q. Эйнштейн
3
Не удалось мне 10.10.3. Xcode 6.3 с libxml2 version 2.6.21 or later is required!.
Ривера
36

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

На Маверикс (OSX 10.9+):

Установите инструменты командной строки Xcode:

xcode-select --install

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

gem install nokogiri
Мика Винкельспехт
источник
4
Работает на Йосемити. Так рад, что прокрутил вниз и не использовал более старые ответы.
yuяi
Огромное время, спасибо за этот совет! подействовал на меня на мэйверикс
мороженое
Вы пытались использовать мое решение? Не требует инсалации xcode.
Филип Кис
Это официальное решение из документов Nokogiri ( nokogiri.org/tutorials/install_nokogiri.html#mac_os_x ) и единственное, которое работало на El Capitan. Принятое решение там не сработало.
Йоханнес
Работал для меня на Эль Капитане, так бесит. Спасибо за ссылку на Nokogiri docs @Johannes - действительно полезно. Каждый должен держаться подальше от решений, которые говорят «использовать системные библиотеки» - плохой совет.
Polsonby
19

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

Я получаю эту ошибку при попытке gem install nokogiriна OSX Lion 10.7.2. Прежде всего, эта ошибка маскирует реальную проблему, говоря, что libiconv отсутствует, потому что вы получите ту же ошибку, даже если nokogiri не может найти libxslt или libxml2, что в моем случае не удалось.

Поэтому я следовал инструкциям на http://nokogiri.org/tutorials/install_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

Теперь я получил другую ошибку! Это все еще было ошибкой, но, по крайней мере, все было иначе. Процесс 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 -архитектура/

Очевидно, 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+) ниже.
Мика Винкельспехт
17

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

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

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

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

nbering
источник
1
Согласна с твоим настроением нокогири. Каждый. Не замужем. Время.
jbnunn
Не работал для меня в этой форме, но ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariesработал ...
bwoebi
Это сработало и для меня, гораздо более простое решение, я не использовал ARCHFLAGS, просто sudo gem install nokogiri - --use-system-library
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возможности для меня на Каталине ... gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
Рянц
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

Если вы получили предупреждение использовать --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

Я решил эту проблему на 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-select --install не делает - вздох)» - обновления недоступны. Как я обновляю свои инструменты командной строки от XCode? Они не отображаются в разделе «Загрузки» на панели настроек.
chadoh
Это сработало для меня, не заходя в магазин приложений. Я обновил инструменты командной строки и ОС (до Yosemite), затем запустился xcode-select --installи смог установить Nokogiri.
сталь
Мне нужно было сделать: xcode-select --install .. brew install libxml2 .. комплектация config build.nokogiri --use-system-library .. комплектация
Zack Burt
4

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

Камил Сарна
источник
Огромное спасибо. Это спасло мой день тоже.
Писарук
3

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

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

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

Может быть, есть что исправить в nokogiri ...

НТН,

Стефан Аккауи
источник
3

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

SupaIrish
источник
На сегодняшний день я смог запустить $ brew install 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.

scotchi
источник
2

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

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

Мик Вест
источник
У меня установлены libxml2 и libxslt с MacPorts, но нет файлов libiconv. * В / usr / local / lib
Валерио Скиавони,
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 (применение изменений зависит от вашей версии)

однако, если вы используете 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

Racso
источник
2

У меня была похожая проблема на Горном льве. Оказывается, я установил 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

Вы также можете сделать это на Маверикс:

gem install nokogiri - --use-system-library = true --with-xml2-include = / Applications / Xcode.app / Содержание / Разработчик / Платформы / MacOSX.platform / Разработчик / SDKs / MacOSX10.9.sdk / usr / включить / libxml2

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

Сэм Розен
источник
то же решение работает и для 10.7.5: gem install nokogiri - --use-system-library = true --with-xml2-include = / Applications / Xcode.app / Содержание / Разработчик / Платформы / MacOSX.platform / Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
tolginho
2

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

Моя среда была испорчена по некоторым причинам.

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. (пере) установил зависимые библиотеки: сделал 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
Сэм Фигероа
источник
1
Оглядываясь назад (это всегда 20/20), я мог бы, вероятно, просто скорректировать мою переменную env PATH, чтобы предварительно добавить rbenv.
Сэм Фигероа
1

Вам нужно обновить доморощенный до 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

Вы должны дважды проверить версию библиотеки папок.

Илэйк Чанг
источник
Линк и Судо сломают вещи. Они только для бочонков по нескольким причинам. Используйте формулы для заваривания, потому что их легче поддерживать. brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv
1

Домашние пользователи

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

xcode-select --install

Выберите «Получить 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 не нашел его.

Тогда просто постройте нокогири нормально.

Для новых пользователей все, что вам нужно сделать, это установить xcode с помощью xcode-select и установить nokogiri, но если вы нашли этот вопрос, то, вероятно, у вас установлена ​​неудачная установка, а не новая установка Mavericks.

Некоторые из других ответов здесь, безусловно, неверны. Большинство из них пытаются использовать libiconv из доморощенного, что совершенно не нужно. Ответы, brew link libiconvкоторые на самом деле вызывают проблему, когда clang сбивается с толку и пытается прочитать заголовочный файл homebrew и связать его с системными библиотеками. Предлагаемые ответы --use-system-librariesявляются плохими, потому что nokogiri необходимо связать со своими библиотеками libxml2 и libxslt, потому что другие версии этих библиотек несовместимы с ним. Ответы, которые вы хотите собрать из источников, просто безнадежно чрезмерно сложны.

TL; DR:

  • Обновите и / или восстановите установку XCode
  • Отключите ваш доморощенный libiconv, так как попытка использовать это только вызывает проблемы
  • Строй нокогири нормально

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

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

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

Если у вас есть /opt/local/lib/libiconv.dylib, то nokogiri добавляет этот путь в список каталогов, которые он ищет, и он найдет установку MacPorts, аналогичную тому, как он выбирает libiconv для 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 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

Чен Кинрот
источник
это была комбинация --use-system-library и --with-iconv-dir, которые сделали это для меня
aaaarrgh
0

Я столкнулся с этим сегодня утром ... после обновления до Маверикс. Мы сделали много вещей. Однако, если у кого-то есть эта проблема, вот несколько вещей, чтобы попробовать.

Я запустил 'xcode-select --install', а затем установил инструменты командной строки (удивился, что это не обновило ОС до версии). Я запустил «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
...

Эти файлы не существовали в файловой системе ...

После всех этих изменений переехал в новый терминал Windows (чтобы все было свежо). Установка vagrant-berkshelf (которая в свою очередь устанавливает nokogiri) работала нормально.

ПРИМЕЧАНИЕ: при запуске 'env' в новом окне больше не было настроек для CC или CXX ...

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

Аарон Блайт
источник
Вы уверены, что команда выполнена gem install nokogiriуспешно? С сообщением "уже установлено" или с успешной установкой?
Spundun
Да. Я переустанавливал rvm и oh-my-zsh, когда создавал резервные копии на своем Mac. То, что я не смог выяснить, это как установить nokogiri на набор гемов rvm. Когда я снова переключаюсь на 'rvm use system', я могу установить nokogiri 1.6.3.1 поверх 1.5.6, которая поставляется на OS X ruby ​​2.0.0p451.
Аарон Блайт
В конце концов для меня это был stackoverflow.com/questions/19643153/… brew uninstall apple-gcc42 brew install apple-gcc42
Аарон Блайт
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 с xcode.

rexmadden
источник
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' не удалось из-за make: / usr / local / bin / gmkdir: такого файла или каталога нет

То, что работало для меня, было сначала маленькой уборкой:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

А потом brew unlink libiconvи что еще нужно отсоединить (уточните у brew doctor). Затем две магические строки (скопировано из связанного ответа):

brew install coreutils
gem install nokogiri
skensell
источник
0

Простые шаги, которые необходимо выполнить перед началом удаления и установки чего-либо. Проверьте, есть ли у вас CLT (установлены инструменты командной строки):

brew config

см. версию CLT здесь, если ее установка не требует переустановки.

Это означает, что проблема заключается в том, что вам нужно переустанавливать только пакетный гем. Удалите пакет с gem uninstall bundler переустановкой гем Gem gem install bundler

Наиболее важным моментом здесь является разрешение, под которым установлен пакетный гем, на него никогда не должно быть sudoed.

Пикачу-го
источник
-1

Прежде всего, убедитесь, что вы следуете руководству по установке на nokogiri: http://nokogiri.org/tutorials/install_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

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

rvm use 1.9.2@coolproject

Тогда я наконец смогу установить нокогири так:

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
TsenYing
источник
-1

В этом сообщении предлагается установить libiconv вручную.

Впоследствии, nokogiri может быть установлен с несколькими переключателями, сообщающими ему, где найти libiconv (см. Запись в блоге).

В качестве примечания: после установки nokogiri мне удалось установить gollum (установка которого также не удалась, поскольку он не смог найти iconv). Теперь я все еще сталкиваюсь с проблемами, потому что, когда я запускаю gollum, происходит сбой 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*

Обратите внимание на файл MISSING /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, но эта проблема специфична для установки gem, и она должна быть исправлена ​​в потоке!
Даррен Вебер
этот ответ не имеет ничего общего с библиотекой C libiconv, от которой зависит сборка nokogiri. Ответ действительно должен быть удален.
Lamont
-1

Я должен был установить GCC перед запуском ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

Коди Барр
источник