из extconf.rb:161:in
block in process_recipe'
from extconf.rb:154:in
tap'из extconf.rb:154:in
process_recipe'
from extconf.rb:423:in
Мы используем Ruby 1.8.7 (через RVM) на OS X 10.6.6. Попытка установить nokogiri 1.4.4 с помощью сборщика всегда приводит к следующей ошибке:
Installing nokogiri (1.4.4) with native extensions /Users/administrator/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/site_ruby/1.8/rubygems/installer.rb:533:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)
/Users/administrator/.rvm/rubies/ruby-1.8.7-p302/bin/ruby extconf.rb
checking for libxml/parser.h... yes
checking for libxslt/xslt.h... yes
checking for libexslt/exslt.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... no
-----
libiconv is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
[…]
Следуя инструкциям здесь, в вики, а также в сети, мы использовали MacPorts для установки libxml2
и libxslt
, что приводит к следующей ситуации:
sudo port install libxml2 libxslt
Password:
Error: Cannot install libxml2 for the arch(s) 'x86_64' because
Error: its dependency libiconv is only installed for the archs 'i386 ppc'.
Error: Unable to execute port: architecture mismatch
Мы собрали libxml2
и libxslt
из исходного кода и попытались установить как гем с флагами для MacPorts, так и сборку, как описано в вики, а также несколько вариантов, найденных в Интернете. — Результаты остаются прежними. Мы даже загрузили гем, изменили extconf.rb
, как предлагается здесь: https://github.com/tenderlove/nokogiri/issues#issue/381 , и скомпилировали его локально, но окончательный результат тот же.
Что нам не хватает? Мы почти застряли в этой ситуации.
Я задал этот же вопрос и получил такой ответ:
Установите MacPorts: http://www.macports.org
Добавьте /opt/local/bin в свой PATH (bashrc или zshrc или что вы используете).
порт sudo установить libxml2 и порт sudo установить libxslt
Затем sudo gem install nokogiri --no-rdoc --no-ri должен работать без проблем. Это все, что мне нужно было сделать для системы ruby (1.8.7 на OSX 10.6) и 1.9.2 через rvm.
У меня были такие же проблемы на 10.6. Я переустановил MacPorts, порт снова установил libxml2 и libxslt, и теперь у меня больше нет этих проблем.
Предполагая, что вы установили libxml2 и libxslt с MacPorts, вы все равно можете получить эту ошибку из-за несоответствия порядка путей включения и путей ссылок, используемых вызовом have_func('iconv_open', 'iconv.h')
Простое (патч) решение: удалить libiconv.* в /usr/local/lib
Предложение: пусть extconf.rb выполняет несколько более сложную проверку того, какие библиотеки iconv на самом деле установлены, и дает пользователю лучшую подсказку. В этом случае libiconv НЕ отсутствует. На самом деле там ДВА либиконва, компилировался правильный заголовок и линковалась старая библиотека. Похоже, это очень распространенная проблема, с которой сообщение об ошибке файла установки могло бы немного помочь.
И я думаю, что это может быть проблема с mkmf и тем, как он обрабатывает пути к библиотекам? Неудачная проверка компиляции для меня была:
```"gcc -o conftest -I. -I/usr/local/lib/ruby/1.8/i686-darwin10.3.0 -I. -III/opt/local/include -III/usr/local/include -III /usr/local/include -III/usr/include -III/usr/include/libxml2 -I/opt/local/include/libxml2 -I/usr/local/include/libxml2 -I/usr/local/include/libxml2 -II/opt/local/include -II/usr/local/include -II/usr/local/include -II/usr/include -II/usr/include/libxml2 -I/opt/local/include -I/usr /local/include -I/usr/local/include -I/usr/include -I/usr/include/libxml2 -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_XOPEN_SOURCE=1 -fno-common -pipe -fno-common -g -DXP_UNIX -O3 -Wall -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline conftest.c -L.-L/usr/local/lib -L/opt/local/lib -L/usr/local/lib -L /usr/lib -L.-lruby-static -lpthread -ldl -lobjc "
Неопределенные символы для архитектуры x86_64:
"_libiconv_open", ссылка из:
Note the compile stage starts with /opt/local/include, but the link stage starts with /usr/local/lib, which is where the old version was
Я использую Lion и homebrew. Для меня это помогло:
brew install libiconv
brew link libiconv
В моем случае (миграция на OS X Lion), чтобы решить проблему, я почистил macports:
port -qv installed > myports.txt
sudo port -fp uninstall --follow-dependents installed
sudo port clean all
Подробнее: http://trac.macports.org/wiki/Миграция
+1 к тому, что сказал jfahrenkrug. Руководство по установке на http://nokogiri.org/tutorials/install_nokogiri.html , раздел homebrew, вероятно, следует обновить;
варить установить libxml2 libxslt
ссылка для варки libxml2 libxslt
к
варить установить libxml2 libxslt libiconv
ссылка для варки libxml2 libxslt libiconv
исправление jfahrenkrug также сработало для меня
+1 у меня работает
Я следовал инструкциям по сборке libxml2 и libxslt из brew. Я не могу построить нокогири.
Я получаю сообщение об ошибке, когда пытаюсь «варить установку libiconv»:
$ варить установить libiconv
Ошибка: нет доступной формулы для libiconv.
Apple распространяет libiconv вместе с OS X, вы можете найти его в /usr/lib.
Некоторые сценарии сборки не могут правильно определить его, проверьте существующие
формулы растворов.
У меня новая установка Snow Leopard. Я бы предпочел не использовать MacPorts.
Пожалуйста помоги.
@jseigler Я запускаю brew 0.8.1 и без проблем могу установить libiconv. Попробуйте обновить пиво?
У меня была та же проблема, что и у @jseigler. Я использую brew 0.9 на OS X 10.7.3.
Загрузка libiconv и сборка вручную сработали.
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
Если вы разберетесь, как установить Nokogiri против библиотек brew 0.9, дайте мне знать — я обновлю документацию по установке. Тем временем, однако, как пользователь в основном Linux, я боюсь, что не смогу сильно помочь.
@tenderlove , есть идеи? Вы <3 Mac. :) :) :) :)
При использовании brew 0.9 на OSX 10.7.3 работало следующее:
варить установить libxml2 libxslt
ссылка для варки libxml2 libxslt
Установите libiconv из исходников:
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
смолка xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Подвал/libiconv/1.13.1
сделать
судо сделать установить
Затем установите нокогири:
gem install nokogiri -- --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 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib =/usr/local/Подвал/libiconv/1.13.1/lib
@ Бренненф
Хорошо сделано. Это сделало это и для меня.
Инструкции, размещенные на nokogiri.org:
http://nokogiri.org/tutorials/install_nokogiri.html#homebrew_09
Спасибо всем.
@brennenf Спасибо за эту строчку
gem install nokogiri -- --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 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib =/usr/local/Подвал/libiconv/1.13.1/lib
@brennenf ваше исправление дает мне хорошее «Успешно установлено nokogiri-1.5.2», но когда я запускаю установку пакета в моем приложении rails, оно все еще не работает: «Произошла ошибка при установке nokogiri (1.5.2), и Bundler не может продолжить.
Перед объединением убедитесь, что gem install nokogiri -v '1.5.2'
выполняется успешно». Обратите внимание, что «gem install nokogiri -v '1.5.2» также не работает. Кто-нибудь еще сталкивался с этим?
@ttringas — пожалуйста, напишите nokogiri-talk. эта проблема касается nokogiri 1.4.4 и была закрыта в течение нескольких месяцев.
Привет, какие-нибудь новости о Mountain Lion?
У меня не получается выполнить установку.
Я обновил путь, указанный на странице установки 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
это то, что я получил взамен: https://gist.github.com/3186643
@polarblau , смотри, у кого сейчас проблемы :D (у меня)
Это может помочь, но кажется, что «экосистема» RVM глючит после обновления до горного льва. Я удаляю .rvm и устанавливаю rvm с помощью http://unfiniti.com/software/mac/jewelrybox/ , и теперь он работает, но у меня есть предупреждение, в котором говорится:
WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.8
То же самое здесь, переустановка ruby помогла (я не очень удивлен - это довольно распространенная ошибка)
@pietia ;) и др. Некоторые идеи на SO, FYI — http://stackoverflow.com/questions/5528839/installing-nokogiri-fails-libiconv-missing .
@polarblau , поздно! это я уже читал ;)
Чтобы установка работала на моем недавно обновленном Mountain Lion, мне пришлось удалить ранее установленные пакеты rvm (расположенные в $rvm_path/usr), пересобрать ruby 1.9.3, а затем gem install nokogiri преуспел. См. https://rvm.io/packages/
Я на горном льве. Переустановка Ruby сработала для меня.
libxml2 отсутствует.
Я обнаружил, что для решения описанной выше задачи для Homebrew 0.9 в Mac OS X 10.8 Mountain Lion требуется один дополнительный шаг, а именно создание ссылки «/usr/bin/gcc-4.2»:
варить установить libxml2 libxslt
ссылка для варки libxml2 libxslt
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
смолка xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Подвал/libiconv/1.13.1
сделать
судо сделать установить
sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2
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/Подвал/libiconv/1.13.1/lib
brax4444 большое спасибо, вы спасаете жизнь!! Отлично работал с добавлением sudo к вашей последней команде из-за ошибки:
ОШИБКА: при выполнении драгоценного камня... (Errno::EPERM)
Операция запрещена - ~/.rvm/gems/ruby-1.9.3-p194/gems/nokogiri-1.5.5/.autotest
brax4444 мужик! Спасибо
Интересно, может ли кто-нибудь помочь новичку:
Бегущий горный лев 10.8.2 с доморощенным пивом.
Начал с nokogiri 1.5.2 - не хватало типичного libiconv.
Между этой веткой, в частности Brax4444 и руководством по установке на nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html для Homebrew .9, у меня осталось следующее FUBAR:
У меня сейчас нокогири 1.5.5 где рельсы ищет 1.5.2
По-прежнему не удалось исправить проблему с libiconv, несмотря на бесчисленные часы.
Больше не может выполнять команды rails из-за отсутствия драгоценного камня > nokogiri: 1.5.2
Попробуйте установить гем (который будет 1.5.5) или новые рельсы (на данный момент я что-то пробую... вернусь со следующей ошибкой: ОШИБКА: при выполнении гем... (Errno::EPERM)
Операция запрещена - /usr/local/rvm/gems/ruby-1.9.3-p194/gems/nokogiri-1.5.5/.autotest
Может ли кто-нибудь спасти меня? Я должен сдать приложение к завтрашнему дню.
Привет!
Спасибо, что задали этот вопрос! Ваш запрос о помощи в использовании Nokogiri не останется без ответа!
Тем не менее, эта проблема закрыта, и проблемы Github от Nokogiri зарезервированы для сообщений об ошибках или отправки исправлений. Если вы зададите свой вопрос в списке рассылки, команда Nokogiri обещает, что кто-то даст вам ответ своевременно.
Если вы хотите прочитать обоснование этой политики командой Nokogiri, перейдите по ссылке http://bit.ly/nokohelp.
Большое спасибо за понимание! И спасибо за использование Nokogiri.
brax4444, большое спасибо, ваши шаги помогли мне решить аналогичную проблему при установке pg gem.
Инструкции на странице http://nokogiri.org/tutorials/installing_nokogiri.html устарели из-за установки более новых версий (в настоящее время libxml2 версии 2.9.0 и libxslt версии 1.1.28).
@Уинстоны
Спасибо за ваш комментарий, но этот вопрос уже давно закрыт.
Если у вас есть обновление для документации по установке nokogiri, вы можете отправить запрос на извлечение по адресу:
https://github.com/sparklemotion/nokogiri.org-tutorials
или вы можете более четко изложить проблему и решения (комплектовщик не устанавливает libxml2 или libxslt ... вы имеете в виду brew? или порты Mac? или ...?) в новом выпуске, и мы решим его, когда сможем самостоятельно подтвердить.
Спасибо за использование Нокогири!
@flavorjones Извините! Я раскошелюсь.
Спасибо за соавторство Нокогири.
Мне также нужно было установить XCode, чтобы заставить это работать.
Мне нужно было установить инструменты разработчика командной строки.
@dentarg Спасибо, у меня была та же проблема, после восстановления моего Mac инструменты разработчика командной строки не были установлены.
Сделайте это с помощью этой команды «xcode-select --install»
используйте https://github.com/Homebrew/homebrew-dupes/blob/master/libiconv.rb
варить вкладку
заварить установить libiconv
а может это:
конфигурация пакета build.nokogiri --use-system-libraries
но не знаю, работает ли это
Спасибо @brax4444 , твой совет мне тоже помог!
Я использовал родной iconv. Вам не нужно связывать libxml2/libxslt.
brew install libxml2 libxslt
gem install nokogiri -- \
--with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib \
--with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 \
--with-iconv-lib=/usr/lib \
--with-iconv-include=/usr/local/include
Спасибо @patricksereno.
конфигурация пакета build.nokogiri --use-system-libraries
это сработало для меня
Спасибо, brax4444! Эта одна строка (ссылка gcc) тоже помогла мне!
СМОТРИТЕ ОБНОВЛЕННЫЕ ИНСТРУКЦИИ: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53793550
ПРИМЕЧАНИЕ: если вы просматриваете все эти посты один за другим, пробуя все, то ВЫ ДЕЛАЕТЕ ЭТО НЕПРАВИЛЬНО. Все советы «заварить ссылку» (включая этот пост) — плохой совет. Все советы "--use-system-libraries" тоже плохие. СТАААААААА. Перейти к концу.
я считаю, что это сработало для меня:
brew tap homebrew/dupes
brew install libiconv
brew link libiconv --force
gem install nokogiri -v 1.6.3.1 -- --with-iconv-dir=/usr/local
Важным моментом здесь является то, что libiconv необходимо «связать» с /usr/local/include. При нажатии на кнопку «обманки» он будет жаловаться на переопределение системной библиотеки, поэтому вам нужно --force
. Затем вам просто нужно указать nokogiri выполнить поиск /usr/local
, чтобы найти путь iconv для передачи встроенной libxml2 при ее сборке. Используя --use-system-libraries
, люди избавляются от необходимости находить эту библиотеку, чтобы передать ее во внутреннюю сборку libxml2.
Один из способов исправить это — добавить доморощенный конфиг pkg-config для libiconv, так как тогда nokogiri extconf.rb сможет его найти.
Другой способ - жестко закодировать /usr/local/include
в качестве пути поиска здесь:
Я пытался выяснить, как извлечь /usr/local/include из пути в mkmf ruby, и, черт возьми, смогу ли я понять, как это сделать. Слои косвенности в mkmf слишком глубоки. Метод find_header() в mkmf, безусловно, может найти iconv.h, но я не знаю, как извлечь информацию о том, по какому пути он его находит. На самом деле это было бы правильным исправлением для nokogiri, чтобы найти файл заголовка в так же, как mkmf может найти заголовочный файл.
Похоже, что тот факт, что nokogiri не может найти простой заголовочный файл в /usr/local/include без требования внешнего pkg-config, нарушен. Я вижу, насколько уродливым является жесткое кодирование пути, но я не знаю, как спросить mkmf, в каком каталоге find_header находит заголовок...
Также похоже, что здесь есть ошибка, из-за которой dir_config() может возвращать массив путей, разделенных ':', вместо массива из двух путей, но, похоже, это не имеет никакого отношения к решению этой проблемы:
@lamont-granquist отличные инструкции, даже лучше, если вы переключите вкладку на тап :-)
@ericbrooke , лол, я скопировал это из предыдущего постера... исправлено...
Я думаю, что я пробовал каждую команду, упомянутую в этом посте, и все еще сталкивался с этим:
sudo 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-lib=/usr/lib --with-iconv-include=/usr/local/include/
Building native extensions with: '--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-lib=/usr/lib --with-iconv-include=/usr/local/include/'
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.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-lib=/usr/lib --with-iconv-include=/usr/local/include/
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
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.
Я понятия не имею, почему iconv.h
обнаруживается, а iconv_open()
нет (это определено в этом файле). Я видел, что недавно кто-то столкнулся с точно такой же проблемой - http://stackoverflow.com/questions/24735534/nokogiri-install-fails-iconv-doesnt-work-osx
Кто-нибудь видел эту проблему?
СМОТРИТЕ ОБНОВЛЕННЫЕ ИНСТРУКЦИИ: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53793550
@ Рейнмар , можешь попробовать то, что я предложил. Особенно:
brew link libiconv --force
, а затем проверьте наличие ls -la /usr/local/include/iconv.h
ls -la /usr/local/lib/libiconv.dylib
gem install nokogiri -- --with-iconv-dir=/usr/local
Все пути, которые вы используете для версионированных каталогов глубоко внутри «Подвала» доморощенного, довольно ужасны и хрупки, и я не слишком удивлен, что они не работают правильно.
Я использовал эти инструкции http://nokogiri.org/tutorials/installing_nokogiri.html , поэтому пути похожи (версии различаются).
piotrus<strong i="7">@macus</strong> ~> brew link libiconv --force
Warning: Already linked: /usr/local/Cellar/libiconv/1.14
To relink: brew unlink libiconv && brew link libiconv
piotrus<strong i="8">@macus</strong> ~> ls -la /usr/local/include/iconv.h
lrwxr-xr-x 1 piotrus admin 39 Jul 29 19:47 /usr/local/include/iconv.h -> ../Cellar/libiconv/1.14/include/iconv.h
piotrus<strong i="9">@macus</strong> ~> ls -la /usr/local/lib/libiconv.dylib
lrwxr-xr-x 1 piotrus admin 42 Jul 29 19:47 /usr/local/lib/libiconv.dylib -> ../Cellar/libiconv/1.14/lib/libiconv.dylib
piotrus<strong i="10">@macus</strong> ~> gem install nokogiri -- --with-iconv-dir=/usr/local
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
piotrus<strong i="11">@macus</strong> ~> sudo gem install nokogiri -- --with-iconv-dir=/usr/local
Password:
Building native extensions with: '--with-iconv-dir=/usr/local'
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-iconv-dir=/usr/local
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
Возможно, я попробую обновить Ruby/gem... :| Хотя это слепое предположение.
Хорошо... Обновление gem
не помогло. Затем, после установки rvm (но до того, как я обновил Ruby с 2.0.0 до 2.1.*), я решил перезапустить терминал и по ошибке переключился с iterm
на стандартный терминал и... установка nokogiri работала с та же команда, которая раньше не работала. Так что либо мне пришлось перезапустить терминал (хотя раньше я использовал много вкладок в iterm), либо это была какая-то проблема, вызванная xterm. Без понятия, но может кому поможет.
в дополнение к ответу @lamont-granquist вы можете пропустить установку драгоценного камня, если используете пакет и запустить:
bundle config build.nokogiri --use-system-libraries
bundle install
После выполнения инструкций @lamont-granquist:
brew tap homebrew/dupes
brew install libiconv
brew link libiconv --force
gem install nokogiri -v 1.6.3.1 -- --with-iconv-dir=/usr/local
И столкнувшись с той же проблемой, что и @Reinmar , я нашел предложение на StackOverflow и объединил его с другими предложениями здесь, в результате чего:
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 sudo gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2
Это, наконец, сработало для меня, надеюсь, это поможет вам @Reinmar . Почему это работает, мне не понятно, _[сдержанные комментарии о закрытой экосистеме Apple здесь]_. Спасибо всем за то, что поделились своими методами.
Пришлось выдрать брагу и все варки переустановить с нуля и тогда заработало
@doublerebel я думаю, вам может понадобиться переустановить xcode и/или использовать xcode-select. то, что вы сделали, все равно запутано...
Кажется, что с текущей версией homebrew я смог обойтись слегка упрощенной версией того, что придумал @lamont-granquist:
brew tap homebrew/dupes
brew install libiconv
gem install nokogiri -v 1.6.3.1 -- --with-iconv-dir=/usr/local/opt/libiconv
Нет brew link --force libiconv
...
это имеет смысл @jacobvosmaer , документы, вероятно, следует обновить, чтобы использовать это.
(хотя, возможно, отбросьте -v 1.6.3.1)
я бы обновил документы, но сейчас меня отвлекает другое кодирование...
После целого дня работы над этой проблемой стоит отметить, что приведенное выше решение @doublerebel — это первое, что сработает.
СМОТРИТЕ ОБНОВЛЕННЫЕ ИНСТРУКЦИИ: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53793550
это может помочь пользователям с Xcode 5.1.1:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
СМОТРИТЕ ОБНОВЛЕННЫЕ ИНСТРУКЦИИ: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53793550
Кроме того, я бы посоветовал убедиться, что Xcode 5.1.1 установлен (и/или переустановить его), а затем переустановить «Инструменты командной строки для Xcode» здесь: https://developer.apple.com/downloads/
Затем выполните:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
brew tap homebrew/dupes
brew uninstall libiconv
brew install libiconv
gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv
Обновления и восстановление Mac OSX по какой-то причине, кажется, уничтожают Xcode и homebrew. Мне также нравится указывать его на /usr/local/opt/libiconv лучше, чем принудительно связывать его с /usr/local/include.
@lamont-granquist Спасибо за ваши решения. Я применил каждый из них, и ваш - это то, что, наконец, работает для меня.
Запуск «brew uninstall libxml2 libxslt», а затем «sudo gem install nokogiri» исправил это для меня.
Висту с использованием RVM и созданием нового набора драгоценных камней мне пришлось сделать следующее:
brew uninstall libiconv
brew install libiconv
gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv
@lamont-granquist Большое спасибо за исправление. Работал на меня.
@lamont-granquist @ericbrooke спасибо. что убило это.
РЕДАКТИРОВАТЬ: ДАЖЕ ПРОСТЫЕ ИНСТРУКЦИИ: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -54091434
Итак, объединяя хорошие биты из вопроса stackoverflow в этом ответе:
Запустите это, чтобы установить последние инструменты командной строки Xcode и Xcode (выберите «Получить Xcode» в диалоговом окне):
sudo xcode-select --install
Затем обновите libiconv в homebrew:
brew tap homebrew/dupes
brew update
brew uninstall libiconv
brew install libiconv
Установка нокогири:
gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv
Это должно работать для всех на 10.9 + homebrew.
хотел бы услышать отзывы о ^^^, что
сработало для меня, спасибо!
-Крис
В четверг, 28 августа 2014 г., в 16:40, [email protected]
написал:
хотел бы услышать отзывы о ^^^, что
—
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53794057
.
Из любопытства, для чего brew uninstall libiconv
? Означает ли это, что у вас уже каким-то образом установлен либиконв?
@knu да, это означает, что вы используете Mac OsX и установили libiconv через Homebrew , а не через MacPorts. Оба они являются менеджерами пакетов. Если вы не уверены, установлен ли brew, просто введите brew в терминале, если вы получите такой ответ:
Example usage:
brew [info | home | options ] [FORMULA...]
brew install FORMULA...
brew uninstall FORMULA...
brew search [foo]
brew list [FORMULA...]
brew update
brew upgrade [FORMULA...]
brew pin/unpin [FORMULA...]
Troubleshooting:
brew doctor
brew install -vd FORMULA
brew [--env | config]
Brewing:
brew create [URL [--no-fetch]]
brew edit [FORMULA...]
open https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook
Further help:
man brew
brew home
вы знаете, что доморощенный установлен.
brew list
покажет все установленные вами пакеты, включая libiconv
@ericbrooke Я имею в виду, я не видел смысла делать brew uninstall libiconv
сразу после brew tap homebrew/dupes
, когда libiconv можно было бы найти только после прослушивания дубликатов, потому что его нет в стандартном репо. Это на всякий случай, например, когда ваша доморощенная установка каким-то образом сломана?
Кроме того, как вы знаете из присутствия libiconv в «обманках», iconv является частью OS X + Xcode, и вам не нужно добавлять его через brew.
Я не использую Homebrew, но Homebrew не должен ничего трогать в /usr/{include,lib}, верно? Или переустановка libiconv через brew — это попытка восстановить сломанные?
На свежем MacBook Pro с установленными ванильными инструментами Mountain Lion+Xcode+Command Line Tools я вижу там /usr/include/iconv.h и /usr/lib/libconv.so, поэтому мне было интересно, в чем причина отсутствия этих файлы могут быть.
@lamont-granquist, спасибо.
Я сделал то, что вы перечислили. Я столкнулся с проблемой разрешения на:
У вас нет прав на запись в каталог /Library/Ruby/Gems/2.0.0.
По-видимому, мне нужно исправить мой rvm, и после следующего шага он был установлен и продолжил процесс установки пакета.
РВМ установить 2.1.2
рвм использовать 2.1.2
обновление драгоценного камня --система
@knu, да, каждый раз, когда я обновляю операционную систему или восстанавливаю ее с машины времени, она, кажется, выбрасывает доморощенное пиво, и мне приходится все переустанавливать. эти инструкции настолько пессимистичны, насколько это возможно. если у кого-то есть нормальная чистая установка xcode и libiconv правильно установлен в homebrew, тогда последняя команда установки gem - это все, что нужно.
Итак, получается, что /usr/local/include/iconv.h #define iconv_open to libiconv_open и по какой-то причине clang подхватывает заголовочный файл homebrew в /usr/local/include поверх /usr/include и затем пытается связать против /usr/lib/libiconv.dylib. Хитрость заключается в том, чтобы удалить заголовочный файл iconv.h, созданный путем принудительного связывания libiconv.
TL;DR: предыдущие инструкции о том, как «исправить» эту проблему (включая мою), усугубляют ситуацию.
Итак, актуальная инструкция по восстановлению установки Mac:
Убедитесь, что Xcode и утилиты командной строки установлены правильно. Это устраняет проблемы, из-за которых у меня не было заголовочного файла /usr/include/iconv.h. Выберите «Получить Xcode» в диалоговом окне:
sudo xcode-select --install
Возможно, вы захотите обновить доморощенный и libiconv, если он устарел (и если ваш libiconv в доморощенном установлен давным-давно). Это, вероятно, совершенно необязательно, так как сейчас мы вообще не будем связываться с доморощенным libiconv:
brew update
brew tap homebrew/dupes
brew uninstall libiconv
brew install libiconv
Не связывайте libiconv, чтобы он не переопределял системный libiconv (если это дает вам «нет такого бочонка», это нормально, любая другая ошибка, и вы, вероятно, захотите вернуться и обновить доморощенный и libiconv):
brew unlink libiconv
Построить нокогири:
gem install nokogiri
@lamont-granquist Большое спасибо!!
@lamont-granquist Не знаю почему, но в вашем последнем комментарии gem install nokogiri
у меня не сработало.
Вместо этого, после выполнения всех шагов, таких как:
brew update
brew tap homebrew/dupes
brew uninstall libiconv
brew install libiconv
brew unlink libiconv
gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv
сработало для меня.
Я на 10.9, с rvm, если это поможет.
@lamont-granquist Спасибо за отличное расследование! Я думаю, что попытаюсь воспроизвести проблему и выработать «исправление» для этого.
@SeanWangDev где-то у вас есть еще один iconv.h, который сначала подбирается и используется. Это может быть MacPorts вместо Homebrew.
Да, я так думаю. Есть один в
/usr/local/Cellar/libiconv/1.14/include/iconv.h
еще один в
/usr/include/iconv.h
Более поздняя версия является предыдущей.
Спасибо @lamont-granquist
/usr/include/iconv.h в порядке, это часть Xcode, первый - это доморощенный, который спрятан в «Подвале», что тоже хорошо. Если в /opt/local/include или где-то еще ничего нет, то я предполагаю, что /usr/lib/libiconv.dylib каким-то образом поврежден?
@lamont-granquist Сейчас это немного не в моих силах. Как мы можем узнать, что libiconv.dylib поврежден?
Когда я делаю ls -al /usr/lib/libiconv*
, результат такой
xxxx 1 xxx xxx 16 10 5 2013 /usr/lib/libiconv.2.4.0.dylib -> libiconv.2.dylib
xxxx 1 xxx xxx 2088992 10 5 2013 /usr/lib/libiconv.2.dylib
xxxx 1 xxx xxx 20 10 5 2013 /usr/lib/libiconv.dylib -> libiconv.2.4.0.dylib
Да, выглядит нормально, это мой:
% ls -al /usr/lib/libiconv*
lrwxr-xr-x 1 root wheel 16 Feb 26 2014 /usr/lib/libiconv.2.4.0.dylib@ -> libiconv.2.dylib
-r-xr-xr-x 1 root wheel 2088992 Feb 26 2014 /usr/lib/libiconv.2.dylib*
lrwxr-xr-x 1 root wheel 20 Feb 26 2014 /usr/lib/libiconv.dylib@ -> libiconv.2.4.0.dylib
А как насчет /opt/local/lib/libiconv.dylib
или /opt/local/include/iconv.h
? Любой из них может вызвать проблемы.
@lamont-granquist
Нет, у меня нет каталога /opt/. Это то, что мы ищем?
-r--r--r--+ 1 User admin 1052128 9 4 11:30 /usr/local/Cellar/libiconv/1.14/lib/libiconv.2.dylib
-rw-r--r--+ 1 User admin 1658 9 4 11:22 /usr/local/Library/Taps/homebrew/homebrew-dupes/libiconv.rb
-r-xr-xr-x 1 root wheel 2088992 10 5 2013 /usr/lib/libiconv.2.dylib
Файлы iconv.h — это только эти два:
/usr/local/Cellar/libiconv/1.14/include/iconv.h
/usr/include/iconv.h
Нет все круто. Насколько я вижу, вы должны иметь возможность «gem install nokogiri» без каких-либо других аргументов....
Просто хотел добавить, что gem install nokogiri -v 1.6.3.1 -- --with-iconv-dir=/usr/local
хорошо сработало для меня. При использовании бандлера мне приходилось делать bundle config build.nokogiril --with-iconv-dir=/usr/local
@lamont-granquist Да, gem install nokogiri
теперь работает нормально. Но это состояние другое. На этот раз nokogiri уже был установлен ранее с помощью «gem install nokogiri --with-iconv-dir=/usr/local/opt/libiconv». Раньше, когда у меня не был установлен nokogiri, «gem install nokogiri» не работал.
Возможно ли, что запуск «gem install nokogiri --with-iconv-dir=/usr/local/opt/libiconv» изменил какие-то файлы или добавил некоторые файлы, такие как libiconv.dylib
или iconv.h
?
@SeanWangDev :+1:
ОС Х 10.9.4 Маверикс.
Ребята, пожалуйста, помогите мне. Я пробовал каждый способ, который выше. Ни один из них не работает на меня. Я поставил на gem install nokogiri с/без аргументов, но все равно получаю ошибку:
$ gem установить нокогири
Создание нативных расширений. Это может занять некоторое время...
Сборка нокогири с использованием упакованных библиотек.
ОШИБКА: Ошибка установки nokogiri:
ОШИБКА: не удалось создать собственное расширение gem.
/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby extconf.rb
Сборка нокогири с использованием упакованных библиотек.
проверка iconv.h... * ошибка extconf.rb *
Не удалось создать Makefile по какой-то причине, возможно, из-за отсутствия необходимого
библиотеки и/или заголовки. Дополнительные сведения см. в файле mkmf.log. Вы можете
нужны параметры конфигурации.
Предусмотренные параметры конфигурации:
--with-opt-dir
--без-опт-дир
--with-opt-include
--without-opt-include=${opt-dir}/включить
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--без-сделать-прог
--srcdir=.
--curdir
--ruby=/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby
--помощь
--чистый
--use-системные библиотеки
--enable-static
--отключить-статический
--with-zlib-каталог
--без-zlib-каталог
--with-zlib-include
--without-zlib-include=${zlib-dir}/include
--with-zlib-lib
--without-zlib-lib=${zlib-dir}/lib
--enable-кросс-сборка
--отключить кросс-сборку
/usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:434:in try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:565:in
try_cpp'
из /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:1044:in блок block in have_header'
from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:895:in
в check_for'
из /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:340:in block (2 levels) in postpone'
from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:310:in
open'
из /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:340:in block in postpone'
from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:310:in
open'
из /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:336:in postpone'
from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:894:in
check_for'
из /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:1043:in have_header'
from extconf.rb:103:in
have_iconv?'
из extconf.rb:148:in block (2 levels) in iconv_prefix'
from extconf.rb:90:in
с сохранением_глобалов
из extconf.rb:143:in block in iconv_prefix'
from extconf.rb:120:in
each_iconv_idir'
из extconf.rb:137:in блок iconv_prefix'
from extconf.rb:428:in
в
из extconf.rb:161:in block in process_recipe'
from extconf.rb:154:in
tap'
из extconf.rb:154:in process_recipe'
from extconf.rb:423:in
Файлы Gem останутся установленными в /usr/local/rvm/gems/ruby-2.0.0-p353/gems/nokogiri-1.6.3.1 для проверки.
Результаты записываются в /usr/local/rvm/gems/ruby-2.0.0-p353/gems/nokogiri-1.6.3.1/ext/nokogiri/gem_make.out
подтвердите, что у вас есть эти файлы:
% ls -la /usr/include/iconv.h
-rw-r--r-- 1 root wheel 7981 Jul 29 15:32 /usr/include/iconv.h
% ls -la /usr/lib/libiconv.*
lrwxr-xr-x 1 root wheel 16 Feb 26 2014 /usr/lib/libiconv.2.4.0.dylib@ -> libiconv.2.dylib
-r-xr-xr-x 1 root wheel 2088992 Feb 26 2014 /usr/lib/libiconv.2.dylib*
lrwxr-xr-x 1 root wheel 20 Feb 26 2014 /usr/lib/libiconv.dylib@ -> libiconv.2.4.0.dylib
если вы этого не сделаете, используйте sudo xcode-select --install
и/или перейдите на сайт загрузки разработчиков Apple и вручную удалите и переустановите xcode и утилиты командной строки xcode, пока вы не установите эти файлы.
затем, если вы используете доморощенный, обновите свой доморощенный и unlink
libiconv
brew update
brew tap homebrew/dupes
brew uninstall libiconv
brew unlink libiconv
brew install libiconv
убедитесь, что у вас нет /usr/local/include/iconv.h:
% ls -la /usr/local/include/iconv.h
ls: /usr/local/include/iconv.h: No such file or directory
также убедитесь, что у вас нет /opt/local/include/iconv.h
% ls -la /opt/local/include/iconv.h
ls: /opt/local/include/iconv.h: No such file or directory
если у вас есть этот файл, значит, у вас установлен iconv из macports, в идеале вам следует избавиться от него.
затем попробуйте:
gem install nokogiri
gem install nokogiri -- --with-iconv-dir=/usr
gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv
gem install nokogiri -- --with-iconv-dir=/opt/local
(остановитесь, когда найдете тот, который работает)
если все остальное терпит неудачу:
brew link --force libiconv
gem install nokogiri -- --with-iconv-dir=/usr/local
что-то там должно работать.
@ lamont-granquist: +1:
@lamont-granquist Спасибо за ваши инструкции, я понял, что происходит, и начал работать над исправлением. Однако я по-прежнему не могу воспроизвести проблему ни на одном из своих компьютеров Mac, поэтому нет возможности подтвердить, работает ли исправление. Можете ли вы предоставить шаги для воспроизведения?
Ну, у меня был этот MBP в течение 3 лет, и после 2 обновлений ОС и по крайней мере 3 восстановлений TM мой /usr/include/iconv.h каким-то образом исчез. Таким образом, уничтожение этого файла может вызвать проблему. Решение состоит в том, чтобы правильно переустановить xcode и инструменты командной строки.
Кроме того, во время отладки люди предлагают сделать одну вещь: «сварить ссылку libiconv --force», чтобы она была установлена в /usr/local/include/iconv.h, хотя есть огромные предупреждения, когда вы делаете «brew install libiconv». ' и 'варить ссылку libiconv', что это плохая идея. Проблема в том, что вы можете подобрать этот iconv.h при выборе системы /usr/lib/libiconv.dylib, и у него сразу возникнет конфликт между iconv_open() и libiconv_open(), и он не сможет скомпилироваться, потому что они разные версии.
Я не уверен, что в таких случаях можно что-то исправить. На самом деле проблема заключается в искажении вашей операционной системы и необходимости вернуть ее в более первозданный вид.
Есть одна вещь, которую я не понимаю, почему система сборки nokogiri находит файлы /opt/local/include/iconv.h, установленные MacPorts. Я не использую MacPorts, поэтому не отлаживал это, но это вызывает проблемы, аналогичные тем, когда homebrew имеет iconv.h, связанный непосредственно с /usr/local/include. Если бы nokogiri можно было заставить прекратить это делать, это помогло бы людям, у которых установлен libiconv с MacPorts.
$ ls -la /usr/include/iconv.h
-rw-r--r-- 1 корневое колесо 7981 11 сентября 11:32 /usr/include/iconv.h
ls -la /usr/lib/libiconv.*
lrwxr-xr-x 1 корневое колесо 16 сен 11 01:03 /usr/lib/libiconv.2.4.0.dylib -> libiconv.2.dylib
-r-xr-xr-x 1 корневое колесо 2088992 11 сентября 01:02 /usr/lib/libiconv.2.dylib
lrwxr-xr-x 1 корневое колесо 20 сен 11 01:03 /usr/lib/libiconv.dylib -> libiconv.2.4.0.dylib
заваривать обновление
Обновлен Homebrew с 45e07c0e на e0dee399.
==> Обновленные формулы
android-ndk go lockrun pazpar2
apache-spark h2 mpd pktanon
Gearman juju-quickstart ossp-uuid
$ варить кран
Предупреждение: уже прослушивается!
$ варить удалить libiconv
Удаление /usr/local/Cellar/libiconv/1.13.1...
Ошибка: Отказано в доступе - /usr/local/Cellar/libiconv/1.13.1/bin/iconv
это дает мне ошибку разрешения на этом шаге
вам нужно исправить все ваши разрешения в /usr/local
каким бы ни был ваш логин, вам нужно исправить разрешения, чтобы root не владел домашними файлами в /usr/local:
мое имя пользователя «lamont», которое я могу найти с помощью команды id
:
% id -nu
lamont
чтобы исправить пермс, я бы сделал:
% sudo chown -R lamont /usr/local
однако вы должны быть очень осторожны с этой командой и дважды проверить, правильно ли вы все написали и получили правильное имя пользователя.
@lamont-granquist Разве пакет libiconv для Homebrew не устанавливает /usr/local/lib/libiconv.dylib при установке /usr/local/include/iconv.h? Чего я не понимаю, так это того, что если /usr/local/include/iconv.h подхватывается, то почему /usr/local/lib/libiconv.dylib не используется при компоновке. Обычно, когда -I/usr/local/include находится в CPPFLAGS, -L/usr/local/lib должен быть в LDFLAGS.
Что касается поломки среды, Nokogiri мог бы, по крайней мере, предложить (повторно) установить инструменты командной строки, когда /usr/include/iconv.h отсутствует в OS X.
варить отвязать libiconv
Ошибка: Нет такого бочонка: /usr/local/Cellar/libiconv
Я проигнорировал сообщение и выполнил следующие шаги. Нет успеха
@knu да, я посмотрел на это и думаю, что заблудился в извилистом лабиринте mkmf.rb.
@Ilovebarca rm -f /usr/local/include/iconv.h
может помочь
@lamont-granquist
неа не помогло. Кстати, большое спасибо за попытку помочь мне.
Это безумие, я новичок в Mac, и я начинаю его ненавидеть :))
Я собираюсь внести некоторые изменения в процесс обнаружения iconv и добавить проверку отсутствия /usr/include/iconv.h в OS X в extconf.rb. Вот работа в процессе, и тестировщики приветствуются!
У меня были проблемы с github, обмен стеками, Google и т. д., и единственное, что сработало до сих пор, — это предложение @lamont-granquist . Настройка с помощью:
ОС X 10.9.5
рбенв
Я понимаю, что так много людей каким-то образом ломают свою среду OS X и даже не замечают этого. Одна проблема — отсутствие инструментов командной строки Xcode, а другая — Homebrew. Следующий релиз nokogiri постарается обнаружить такую поломку перед входом в сборку и предупредить об этом пользователя.
Спасибо за вашу поддержку!
Спасибо @lamont-granquist, я боролся с этой проблемой уже неделю, и, наконец, ваше решение по переустановке обратно libiconv работает ... это облегчение !!!
@jomz работает на osx 10.10. спасибо :+1:
xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew doctor
brew install ruby
source /etc/profile
gem install nokogiri
Это установило рубиновую версию 2.1.5p273 и nokogiri 1.6.4.1. Предположительно, вы можете принудительно установить эти версии через homebrew и rubygems.
brew install libxml2 libxslt
gem install nokogiri -- --use-system-libraries
Я не уверен, что нужно было переустановить libxml2 и/или libxslt, но мне это помогло.
Я полагаю, что мы зафиксировали это в обновленном руководстве по установке здесь:
Если нет, пожалуйста, дайте мне знать, и я снова открою.
Спасибо за ссылку на урок! У меня это сработало, когда я указал пути к файлам, как описано в разделе «Использование нестандартных установок libxml2 / libxslt». (Кажется, /usr/bin в OS X 10.6.8 считается нестандартным местом для системных библиотек.)
Чтобы найти пути к файлам, я использовал команды терминала which xml2-config
и which xslt-config
. Может быть, обновить учебник, чтобы предложить сделать это?