Мне наконец удалось решить эту проблему. Ни одно из вышеперечисленных решений полностью не исправило это для меня.
Я получал эту ошибку при попытке gem install nokogiri
на OSX Lion 10.7.2. Прежде всего, эта ошибка маскирует реальную проблему, говоря, что libiconv отсутствует, потому что вы получите ту же ошибку, даже если nokogiri не сможет найти libxslt или libxml2, что в моем случае не удалось.
Таким образом, я следовал инструкциям на http://nokogiri.org/tutorials/installing_nokogiri.html в разделе Homebrew (слегка изменен для учета более актуальной версии libxml2):
brew install libxml2
brew link libxml2
# install libxslt from source
wget ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz
tar -zxvf libxslt-1.1.26.tar.gz
cd libxslt-1.1.26
./configure --prefix=/usr/local/Cellar/libxslt/1.1.26 --with-libxml-prefix=/usr/local/Cellar/libxml2/2.7.8
make
sudo make install
В этот момент я следовал инструкциям на сайте нокогири и попробовал
gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26
Однако это все равно не удалось, потому что при сборке libxslt из исходного кода он устанавливает папку /include
в интересном месте. Поэтому вам нужно указать папки lib
и include
отдельно, например, так:
gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt
Это все еще не работало (та же ошибка libiconv), поэтому я попытался указать все три необходимые библиотеки (libxslt, libxml2 и libiconv):
gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt --with-iconv-dir=/usr/local/Cellar/libiconv/1.14 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8
Теперь я получил другую ошибку! Это все еще была ошибка, но, по крайней мере, она была другой. Процесс make завершился неудачно с:
in /opt/local/lib/libz.1.dylib, file was built for unsupported file format which is not the architecture being linked (x86_64) for architecture x86_64
Э-э, что? После долгих поисков я наткнулся на этот чудо-пост: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required-architecture/
Очевидно, OSX Lion поставляется с некоторыми плохими версиями библиотеки libz (libz.dylib, libz.1.dylib, libz.1.2.4.dylib
), и их необходимо заменить на последние версии из Xcode SDK. Статья объясняет это лучше, чем я, поэтому прочитайте приведенную выше ссылку для получения конкретных инструкций.
Как только они были заменены, я запустил
gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt --with-iconv-dir=/usr/local/Cellar/libiconv/1.14 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8
снова и все было хорошо. Я надеюсь, что это помогает кому-то еще.