Чому встановлення 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 за допомогою варіння та створення libiconv з джерел (як описано у " Встановлення Nokogiri "), помилка залишається тією ж.

При спробі запустити інсталяцію для Nokogiri, здається, libxml2 та libxslt здаються нормальними, але не libiconv.

Хто краще знає ці речі, знає, як встановити Нокогірі?


Ви не показуєте точні команди, які ви намагаєтесь використовувати, тому ми будемо стріляти в темряві, намагаючись відповісти. Я завжди використовую gem install nokogiri, але тоді я використовую RVM для управління своїми установками Mac OS Ruby. libxml і libxslt не пов'язані з iconv, тому я рекомендую задати своє запитання на Nokogiri-talk, який є їх форумом підтримки. Я не пам'ятаю, щоб під час встановлення Nokogiri виникли проблеми з iconv, і я маю це на купі машин.
Олов'яний чоловік

1
Я тим часом відкрив квиток у github: github.com/tenderlove/nokogiri/isissue/442, який містить трохи більше інформації.
polarblau

2
Ось посилання , щоб вирішити ту ж проблему на OSX El Capitan, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
СБС

" sudo gem install nokogiri". Не використовуйте sudoдля встановлення дорогоцінних каменів і не змінюйте Ruby за замовчуванням. Замість цього використовуйте rbenv або RVM для управління окремим Ruby. Це висвітлюється кілька разів під час переповнення стека.
Олов'яний чоловік

Ви спробували видалити xz перед встановленням nokogiri?
lifeisfoo

Відповіді:


237

У мене було те саме питання. На жаль, " Встановлення Nokogiri " не стосується проблем Iconv . Ось як я вирішив проблему.

Спочатку встановіть домашній пиріг , це полегшить ваше життя. Якщо у вас вже встановлено, не забудьте взяти останні формули, оновивши так:

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

5
Після того, як я зробив "варити встановити libiconv" і "заварити посилання libiconv", мені вдалося встановити nokogiri успішно. Я сподіваюся, що це означає, що я не маю жорсткої залежності від конкретної версії libiconv, встановленої пивом.
Стівен Чанін

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

Редагувати: Якщо ви користуєтеся пакетом, як згадував Geoff, ви можете зробити:

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

5
Якщо ви використовуєте bundler - ви можете запустити "bundle config build.nokogiri --use-system-library"
Джефф Евасон

1
нарешті, "bundle config build.nokogiri --use-system-library" запрацював. Я ненавиджу, коли це трапляється
nils petersohn

1
Працював для мене на Mac OS 10.10 Yosemite.
Ллойд Девульф

навіщо мені потрібні додаткові "-" в середині команди gem install?
Рембрандт Ейнштейн

3
Помилка для мене 10.10.3. Xcode 6.3 с libxml2 version 2.6.21 or later is required!.
Рівера

36

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

На Mavericks (OSX 10.9+):

Встановити інструменти командного рядка Xcode:

xcode-select --install

потім встановіть дорогоцінний камінь:

gem install nokogiri

4
Працює на Йосеміті. Тож радий, що я прокрутився вниз і не використав старі відповіді.
yuяi

величезний час, спасибі за цю пораду! працював зачаровував мене на мавериках
морозиві

Ви спробували використати моє рішення? Для цього не потрібна інкаляція xcode.
Філіп Кіс

Це офіційне рішення з Документів Nokogiri ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ), і єдине, що працювало на El Capitan. Прийняте рішення там не працювало.
Йоханнес

Працював для мене на Ель-Капітан, так нахабно. Дякуємо за посилання на документи Nokogiri @Johannes - дуже корисно. Кожна людина повинна триматися подалі від рішень, які говорять про "використання системних бібліотек" - погана порада.
Полсонбі

19

Нарешті я зміг вирішити цю проблему. Жодне з перерахованих вище рішень повністю не зафіксувало це для мене.

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

Тому я дотримувався вказівок на веб-сторінці http://nokogiri.org/tutorials/installing_nokogiri.html у розділі Домашня мова (трохи змінений для врахування більш актуальної версії 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

Тепер я отримав іншу помилку! Це все ще була помилка, але принаймні вона була іншою. Не вдалося зробити процес:

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 і, дотримуючись решти цих інструкцій, зробив свою справу.
Недистракція

1
Я думаю / opt / local позначає установку MacPorts. Якщо ви користуєтеся домашньою мовою та Macports, ви отримаєте певну функціональність (як це видно у вашому випадку). Найкраще рішення - видалити Macports і використовувати домашню емісію для ваших керованих пакетів.
Кори

Нижче я додав нове простіше рішення для Mavericks (OSX 10.9+).
Міка Вінкельспехт

17

Тільки додаючи свій голос до натовпу, але mkmf.log щось сказав про те, що не вдалося знайти символи для архітектури x86_64. Я наткнувся на це рішення:

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

Може не вирішити нічого для початкового запитувача, але це може комусь допомогти.

Бічна примітка: nokogiri був моїм найвищим бар'єром у використанні рубінових програм. Кожен раз, коли хтось залежить від іншої версії, я повинен з'ясувати, як його побудувати. І моя проблема щоразу різна.


1
Погодився з вашими настроями nokogiri. Кожен. Неодружений Час.
jbnunn

Не працював для мене в такому вигляді, але ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariesпрацював ...
bwoebi

Це спрацювало і для мене, набагато простіше рішення, я не використовував ARCHFLAGS, просто встановив sudo gem nokogiri - --use-system-
library

8

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

це працювало для мене на 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 Домашня мова 0.9.4

Ось мій літній з цієї теми, щоб вдало встановити nokogiri, виправляючи відсутні лібікони.

Встановити http://brew.sh/ Homebrew або оновити до останнього за допомогою команди нижче

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 з рубіном 2.1.1.
jmstone617

"У AppStore натисніть на оновлення та встановіть останню версію інструментів командного рядка (яка, мабуть, виберіть xcode-select - встановлення не робить - зітхніть)" - оновлення не доступні. Як оновити інструменти командного рядка з Xcode? Вони не відображаються в розділі "Завантаження" в області налаштувань.
чадо

Це працювало для мене, не відвідуючи магазин додатків. Я оновив інструменти командного рядка та ОС (до Yosemite), потім запустив xcode-select --installі мені вдалося встановити Nokogiri.
сталь

Мені довелося зробити: xcode-select - встановити .. варити встановити libxml2 .. пакет конфігурації build.nokogiri --use-system-library .. встановити пакет
Zack Burt


3

Дивлячись у файл mkmf, виявляється, що nokogiri (або дорогоцінний камінь, я не знаю) намагаються знайти залежності в / 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,


3

libiconv було видалено з Homebrew 0.9. Тепер рекомендується компілювати libiconv з джерела, а потім посилатися на встановлення, коли ви встановлюєте gem nokogiri. Дивіться інструкції щодо встановлення Nokogiri в розділі Homebrew 0.9 на сторінці встановлення Nokogiri


На сьогоднішній день мені вдалося запустити $ 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.


2

Якщо припустити, що ви встановили libxml2 та libxslt з MacPorts, то, можливо, ви все ще отримаєте цю помилку через невідповідність порядку включення шляхів включення та шляхів посилань, використовуваних викликом до have_func ('iconv_open', 'iconv.h')

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


У мене libxml2 та libxslt встановлені з MacPorts, але немає файлів libiconv. * У / usr / local / lib
Valerio Schiavoni

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

так само, як вище, це рішення для домашньої кави та використання gem install (застосувати зміни залежать від вашої версії)

однак, якщо ви використовуєте 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


2

Я мав подібні проблеми на гірському Леві. Виявляється, я раніше встановив libiconv через пакет rvm, і це більше не потрібно для рубіну 1.9.3 / Mountain Lion / nokogiri.

Дотримуючись поради https://rvm.io/packages/ , я видалив свій каталог $ rvm_path / usr та переробив ruby ​​1.9.3. Після цього встановлення nokogiri була простою установкою дорогоцінних каменів. Нічого не возиться з варивом / макпортами / встановленнями вручну!


2

Ви також можете це зробити на Mavericks:

gem install nokogiri - --use-system-library = true --with-xml2-include = / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX10.9.sdk / usr / включати / libxml2

Просто переконайтеся, що у вас встановлено xcode


таке ж рішення також працює для 10.7.5: gem install nokogiri - --use-system-library = true --with-xml2-include = / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
tolginho

2

Я деякий час бився з Nokogiri на 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. (повторно) - встановив залежні libs: зробив brew install libxml2 libiconv libxslt 4. встановив мою рубінову версію свіжою (з 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) я міг би, напевно, просто скорегував свою PATH env-змінну для того, щоб першим додати 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

ДОМАШНІ КОРИСТУВАЧІ

Правильне рішення, щоб вирішити цю проблему, якщо ви використовуєте домашню мову:

xcode-select --install

У діалоговому вікні виберіть "Отримати Xcode".

brew unlink libiconv
gem install nokogiri

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

Тоді вам потрібно від’єднати libiconv від домашньої мови. Вам цього не потрібно. І clang насправді підбере /usr/local/include/iconv.h over /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які насправді спричиняють проблему, коли кланг плутається та намагається прочитати файл заголовка домашнього перекладу та посилання на системні бібліотеки. Відповіді, які наводять на думку --use-system-libraries, погані, тому що nokogiri потрібно пов'язати з його бібліотеками libxml2 та libxslt, оскільки інші версії цих бібліотек несумісні з нею. Відповіді, які ви хочете зібрати з джерел, просто безнадійно надмірно складні.

TL; DR:

  • Оновіть та / або відновіть установку Xcode
  • Від’єднайте свій домашній libiconv від спроби використання, яка викликає лише проблеми
  • Будуйте nokogiri нормально

ПОТРІБНИКИ RVM

У старих установках RVM може бути лібіконв, який ховається у ваших каталогах rvm, де вони суперечать вашим системним бібліотекам. Див. Https://stackoverflow.com/a/11809261/506908 для отримання додаткової інформації.

ПОТРІБНИКИ MacPorts

Якщо у вас є /opt/local/lib/libiconv.dylib, то nokogiri додає цей шлях до списку каталогів, які він шукає, і він знайде установку MacPorts, подібну тому, як він підбирає домівки libiconv і конфліктує з системними бібліотеками. Ви можете спробувати:

sudo port uninstall libiconv

Якщо це не вдається через залежність, то ви можете спробувати зв’язатись безпосередньо з версією MacPorts (не перевірено):

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

Підтвердження gem install nokogiri -- --with-iconv-dir=/opt/localпрацює чудово з libiconvвстановленим
MacPorts

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 / local / льох / libiconv / 1.14


саме комбо бібліотек --use-system та --with-iconv-dir зробило це для мене
aaaarrgh

0

Я наткнувся на це сьогодні вранці ... після оновлення до Мавериків. Ми багато чого зробили. Однак, якщо у когось виникає ця проблема, тут можна спробувати деякі речі.

Я запустив 'xcode-select --install', після чого встановив інструменти командного рядка (здивований, що це не оновилося на ugrade ОС). Я запустив 'rvm implode' (я буду його створювати згодом).

Ми зібрали два вихідні файли помилок:

~ / .vagrant.d / gems / gems / nokogiri-1.6.3.1 / ext / nokogiri / gem_make.out

~ / .vagrant.d / gems / gems / nokogiri-1.6.3.1 / ext / nokogiri / tmp / x86_64-apple-darwin12.5.0 / ports / 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
...

Ці файли не існували у файловій системі ...

Після всіх цих змін переміщення до нових вікон терміналів (щоб все було свіжим). Установка бродягової шельфи (яка в свою чергу встановлює nokogiri) спрацювала чудово.

ПРИМІТКА: під час запуску "env" у свіжому вікні більше не було налаштувань для CC або CXX ...

Не переконайтесь у ключовій частині цього, або якщо порядок має значення, але намагався відтворити частини, які, здається, грають певну роль у налагодженні цього.


Ви впевнені, що команда gem install nokogiriуспішна? Чи не буде "вже встановленого" повідомлення чи вдалою установкою?
Spundun

Так. Я перевстановив rvm та oh-my-zsh під час створення резервних копій речей на своєму Mac. Що я не зміг зрозуміти - це як встановити nokogiri на гемсет rvm. Коли я повертаюсь до системи «rvm use», я можу встановити nokogiri 1.6.3.1 поверх версії 1.5.6, що надходить на OS X ruby ​​2.0.0p451.
Aaron blythe

Врешті-решт для мене це було stackoverflow.com/questions/19643153/… заварювання видалення apple-gcc42 brew встановлення apple-gcc42
aaron blythe

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

Це перевірено, працюючи на компіляторі кланг-файлів OSX 10,9 w / xcode.


0

У мене виникла ця проблема, коли я модернізував Mac OS до Yosemite. Мені вдалося вирішити це питання, зробивши:

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

0

У мене було подібне питання, і прийнята відповідь використовується для мене. Однак тепер я бачив нове повідомлення про помилку, коли gmkdirкоманда відсутня, як у цьому питанні:

Не вдалося встановити gem 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

0

Прості дії, які потрібно виконати, перш ніж щось починати видаляти та встановлювати. Перевірте, чи встановлено CLT (інструменти командного рядка):

brew config

див. тут версію CLT, якщо її встановлена ​​не потребує перевстановлення.

Це означає, що проблема з дозволу ви перевстановлюєте лише дорогоцінний камінь, що робить його, не судо. Видаліть постачальник з gem uninstall bundler перевстановленням gem bundler gem install bundler

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


-1

Перш за все переконайтеся, що дотримуйтесь посібника з установки на nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

Після перегляду керівництва у мене все ще виникло це питання. Ось як я це вирішив:

Перш за все, я встановив iconv за допомогою homebrew: варити встановити iconv

Тоді я видалив рубін, на щастя, це дуже просто з rvm:

rvm uninstall 1.9.2        

Тоді мені довелося перевстановити рубін із такими параметрами:

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

Тоді я нарешті можу встановити 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

-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

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

ПРИМІТКА ПРОПУСКАЛЬНИЙ /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, але ця проблема є специфічною для встановлення дорогоцінного каміння, і його слід виправити в потоці!
Даррен Вебер

ця відповідь не має нічого спільного з бібліотекою C libiconv, від якої залежить побудова nokogiri. відповідь дійсно слід видалити.
lamont,

-1

Мені довелося встановити gcc спочатку перед запуском ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.