为什么在Mac OS上安装Nokogiri失败,libiconv丢失?
我一直试图在Mac OS 10.9.3上安装Nokogiri,无论我尝试什么,安装失败最终以下错误消息:
$ 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
在web上发现很多帮助后,包括使用brew构build和安装libxml2和libxslt以及从源代码构buildlibiconv(如“ 安装Nokogiri ”中所述),错误仍然相同。
当试图运行Nokogiri的安装,libxml2和libxslt似乎很好,但不是libiconv。
知道这些事情的人都知道如何安装Nokogiri?
我遇到过同样的问题。 不幸的是,“ 安装Nokogiri ”不包括Iconv问题。 以下是我如何解决这个问题。
首先安装自制软件 ,它会让你的生活更轻松。 如果您已经安装了它,请确保通过更新来获取最新的公式:
brew update
注意 :在OSX 10.9+中,您可能需要安装xCode命令工具才能安装libiconv。
xcode-select --install
然后安装更新版本的libiconv
brew install libiconv
然后链接你的新iconv库:
brew link libiconv
然后安装你的gem
gem install nokogiri -- --with-iconv-dir=/usr/local/Cellar/libiconv/1.14
尝试使用系统库。 OSX自带更新版本的libiconv,但默认的安装脚本似乎有问题
gem install nokogiri -- --use-system-libraries
编辑:如果使用捆绑器,正如Geoff所说,你可以这样做:
bundle config build.nokogiri --use-system-libraries
@ Cory的解决scheme包含正确的答案,但是小牛的解决scheme实际上比顶级解决scheme简单得多,所以我只需要重新发布必要的步骤。
在小牛(OSX 10.9+)上:
安装Xcode命令行工具:
xcode-select --install
然后安装你的gem:
gem install nokogiri
我终于能够解决这个问题。 上述解决scheme没有一个完全解决了我的问题。
我试图在OSX Lion 10.7.2上gem install nokogiri
时遇到了这个错误。 首先,这个错误通过说libiconv丢失来掩盖真正的问题,因为即使nokogiri找不到libxslt或libxml2,在我的情况下,它也不会得到相同的错误。
所以我遵循了Homebrew部分的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
但是,这仍然失败,因为从源代码构buildlibxslt时,它将/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
现在我得到了一个不同的错误! 这仍然是一个错误,但至less是不同的。 制作过程失败:
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
呃,什么? 经过大量的谷歌search,我遇到了这个奇迹后: http : //www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -build筑/
显然,OSX Lion附带了libz库( libz.dylib, libz.1.dylib, libz.1.2.4.dylib
)的一些不好的版本,而且它们需要用Xcode SDK中的最新版本replace。 这篇文章比我能解释得更好,所以请阅读上面的链接以获取具体的说明。
一旦这些被replace,我跑了
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
再一次都很好。 我希望这可以帮助别人。
只是join我的声音,但mkmf.log说了一些关于不能findx86_64体系结构的符号。 我偶然发现了这个解决scheme:
sudo env ARCHFLAGS="-arch x86_64" gem install nokogiri -- --use-system-libraries
原来的提问者可能不会解决任何问题,但是这可能有助于某人。
注意:nokogiri一直是我使用ruby应用程序的最大障碍。 每次有人依靠不同的版本,我必须弄清楚如何build立它。 而且我的问题每次都不一样
我正在使用.. OS X 10.9.4自制软件0.9.4
这是我从这个线程的总结,成功安装nokogiri,修复缺less的libiconv。
安装自制软件 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
我在Yosemite
运行Ruby 2.1.4
解决了这个问题
- 确保你已经安装了xCode 6.1
- 然后
xcode-select --install
- 在AppStore中点击更新并安装最新版本的命令行工具(显然,
xcode-select --install
不会做 – 叹气) - 然后
bundle install
正常工作。
我也做了一个brew install libiconv
但我不相信这一步是必要的。
我尝试了很多东西,但没有为我工作。 然后,我终于find了iconv文件 ,并保存了我的一天!
在mkmf文件中看,它认为nokogiri(或者gem,我不知道)试图在/ op / local /中find依赖关系。 对我而言,这不是search它们的正确途径。
迫使nokogiri在正确的地方(我使用自制软件)findlibs为我做了诡计:
$ 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,
libiconv已经从Homebrew 0.9中移除了。现在build议从源代码编译libiconv,然后在安装nokogiri gem时参考安装。 请参阅Nokogiri安装页面上Homebrew 0.9部分的Nokogiri安装说明
查看gem构build目录下的mkmf.log文件(例如/Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log)。 这有更多的信息。 在我遇到这种情况时,Nokogiri专门为库searchpath添加了/ opt / local / lib,而GNU步步高在那里安装了一个不兼容的libiconv。
假设你用MacPorts安装了libxml2和libxslt,那么你可能仍然会得到这个错误,这是由于调用had_func('iconv_open','iconv.h')所使用的包含path和链接path的顺序不匹配。
简单(补丁)解决scheme:删除/ usr / local / lib中的libiconv。*
$ 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的解决scheme(应用更改取决于您的版本)
但是,如果您使用Gemfile和捆绑软件安装,则应在安装之前应用软件包configuration,这里是代码
$ 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
我在山狮上遇到了类似的麻烦。 事实certificate我之前已经通过rvm包安装了libiconv,而这对ruby 1.9.3 / Mountain Lion / nokogiri来说已经不再需要了。
根据https://rvm.io/packages/的build议,我删除了我的$ rvm_path / usr目录并重build了ruby 1.9.3。 此后安装nokogiri是一个简单的gem安装。 没有搞泡沫/ macports /手动源安装!
你也可以在小牛队这样做:
gem install nokogiri – –use-system-libraries = true –with-xml2-include = / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX10.9.sdk / usr /有/ libxml2的
只要确保你已经安装了xcode
今天我在OS X 10.10优胜美地上与Nokogiri进行了一段时间的战斗
我的环境出于某种原因被搞砸了。
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
你需要升级你的自制软件到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
您应该仔细检查文件夹库版本。
HOMEBREW用户
如果您使用的是自制软件,请正确解决此问题:
xcode-select --install
从对话框中select“获取Xcode”。
brew unlink libiconv gem install nokogiri
xcode-select步骤将修复您的Xcode安装和Xcode Command Line Utils安装。 我发现我没有/usr/include/iconv.h由于O / S升级或从备份还原的某种问题。 如果在运行xcode-select之后没有该头文件和/usr/lib/libconv.dylib,那么您很可能需要将Xcode从Application文件夹拖到垃圾箱并重新安装,然后手动下载用于Xcode的命令行工具从https://developer.apple.com/downloads/index.action并安装。;
那么你需要解开libiconv与自制软件的链接。 你不需要这个。 而clang实际上会在/usr/local/include/iconv.h上find/usr/local/include/iconv.h,并将#define iconv_open转换为libiconv_open,然后再链接到/usr/lib/libiconv.dylib,它没有libiconv_open是什么导致mkmf失败findlibiconv。 你需要做的是去除iconv.h中的链接,以便nokogiri不会find它。
然后通常build立nokogiri。
对于新用户,所有你需要做的就是用xcode-select安装xcode并select安装nokogiri,但是如果你发现这个问题,那大概你已经有了一个拙劣的安装,而不是全新安装的小牛。
这里的其他一些答案肯定是不正确的。 他们中的大多数都试图从自制软件中使用libiconv,这完全是不必要的。 brew link libiconv
的答案实际上是导致铛变得困惑的问题,并尝试读取一个自制头文件和链接对系统库。 build议--use-system-libraries
的答案很差,因为nokogiri需要链接到捆绑的libxml2和libxslt库,因为这些库的其他版本与它们不兼容。 希望您从源代码编译的答案只是无可救药地过于复杂。
TL; DR:
- 升级和/或修复您的Xcode安装
- 取消链接你的自制libiconv,因为试图使用,只会导致问题
- 通常build立nokogiri
RVM用户
旧的RVM安装可能会在您的rvm目录中隐藏与您的系统库冲突的libiconv。 有关更多信息,请参阅https://stackoverflow.com/a/11809261/506908 。
MacPorts用户
如果你有/opt/local/lib/libiconv.dylib,那么nokogiri将这个path添加到它所search的目录列表中,它会findMacPorts安装,类似于如何拾取自制libiconv并与系统库冲突。 你可以试试:
sudo port uninstall libiconv
如果由于依赖关系而失败,那么你可以直接尝试链接到MacPorts版本(未经testing):
gem install nokogiri -- --with-iconv-dir=/opt/local
这个为我工作
sudo env ARCHFLAGS =“ – arch x86_64”gem install nokogiri:1.6.6.2 – –use-system-libraries –with-xml = / usr / local / Cellar / libxml2 / 2.9.3 / –with-iconv- DIR =的/ usr /本地/地窖/ libiconv的/ 1.14
今天早上我遇到了这个……在升级到小牛之后。 我们做了很多事情。 但是,如果有人有这个问题,这里有一些事情要尝试。
我运行了'xcode-select –install',然后得到了安装的命令行工具(惊讶这没有更新的操作系统ugrade)。 我运行了“rvm implode”(我将在以后重新构build它)。
我们拼凑了两个错误输出文件:
〜/ .vagrant.d /gem/gem/引入nokogiri-1.6.3.1 / EXT /引入nokogiri / gem_make.out
〜/ .vagrant.d /gem/gem/引入nokogiri-1.6.3.1 / EXT /引入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 ...
这些文件在文件系统上不存在…
所有这些变化后,移动到一个新的terminal窗口(所以一切都是新鲜的)。 安装vagrant-berkshelf(反过来安装nokogiri)工作得很好。
注意:在新窗口中运行'env'时,不再有CC或CXX的设置…
不确定的关键部分,或者如果顺序重要,但试图重新创build似乎起到了这个工作的作用部分。
根据文档,从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
这是validation工作在OSX 10.9 w / xcode的叮当编译器。
当我将我的Mac OS升级到Yosemite时,我遇到了这个问题。 我能够通过这样做来解决这个问题:
xcode-select --install brew uninstall libiconv brew install libiconv gem install nokogiri
我有一个类似的问题,接受的答案曾经为我工作。 现在,无论如何,我已经看到一个新的错误消息,其中一个gmkdir
命令丢失,如在这个问题:
gem install nokogiri -v'1.5.11'因make 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
首先请确保您按照nokogiri上的安装指南进行操作: http ://nokogiri.org/tutorials/installing_nokogiri.html
遵循指南后,我仍然有这个问题。 这是我解决它的方法:
首先我使用自制软件安装iconv:brew install iconv
然后我卸载了ruby,幸运的是这对于rvm来说非常简单:
rvm uninstall 1.9.2
然后我不得不重新安装ruby与以下选项:
CC=gcc-4.2 rvm install 1.9.2-p290 --with-iconv-dir=/usr/local/Cellar/libiconv/1.13.1
然后我用新的ruby版本创build一个gemset:
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
在我的情况下(和scotchi一样),由于/ opt / local / lib中的iconv库不兼容,构build失败。 默认情况下,Nokogiri构build过程首先查看/ 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
这篇博文build议手动安装libiconv。
随后,nokogiri可以安装一些开关,告诉它在哪里findlibiconv(参见博客文章)。
作为一个方面说明:安装nokogiri后,我设法安装gollum(安装也失败,因为它找不到iconv)。 现在我仍然面临问题,因为当我启动gollum时,Python崩溃了。
$ 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*
注意在2.0.0-p0 gems安装中存在的2.0.0-p247中的MISSING /lib/iconv/iconv.so文件。
$ 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
在运行./configure --prefix=/usr/local/Cellar/libiconv/1.13.1
之前,我必须先安装gcc
我遵循nokogiri安装页面的指示,也安装了xcode工具。 但是对我来说还是不行。
然后我看到brew install libxml2 libxslt
命令输出以下(其他不同的东西):
To allow the nokogiri gem to link against this libxslt run: gem install nokogiri -- --with-xslt-dir=/usr/local/opt/libxslt
所以,我运行这个和nokogiri安装成功。
这适用于我:
gem install nokogiri -- --use-system-libraries
如果你使用Bundler,告诉它使用选项:
bundle config build.nokogiri --use-system-libraries bundle install
REF