Nokogiri: 缺少 libiconv

创建于 2011-04-03  ·  109评论  ·  资料来源: sparklemotion/nokogiri

我们在 OS X 10.6.6 上运行 Ruby 1.8.7(通过 RVM)。 尝试使用捆绑器安装 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 ***
[…]

按照 wiki 和网络中的说明,我们使用 MacPorts 安装libxml2libxslt ,这会导致以下情况:

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

我们已经从源代码构建libxml2libxslt并尝试安装带有 MacPorts 标志的 gem 和 wiki 中描述的构建以及在线找到的一些变体。 — 结果保持不变。 我们甚至下载了 gem,按照这里的建议更改extconf.rbhttps ://github.com/tenderlove/nokogiri/issues#issue/381,并在本地编译它,但最终结果是一样的。

我们缺少什么? 我们几乎被这种情况困住了。

所有109条评论

我问了同样的问题,并得到了这样的回答:

安装 MacPorts:http: //www.macports.org
将 /opt/local/bin 添加到您的 PATH(bashrc 或 zshrc 或您使用的任何内容)。
sudo 端口安装 libxml2 和 sudo 端口安装 libxslt
然后 sudo gem install nokogiri --no-rdoc --no-ri 应该可以正常运行。 这就是我对系统 ruby​​(OSX 10.6 上的 1.8.7)和通过 rvm 的 1.9.2 所做的全部工作。

我在 10.6 上遇到了同样的问题。 我重新安装了 MacPorts,端口再次安装了 libxml2 和 libxslt,现在我不再遇到这些问题。

假设您使用 MacPorts 安装了 libxml2 和 libxslt,那么由于调用 have_func('iconv_open', 'iconv.h') 所使用的包含路径和链接路径的顺序不匹配,您可能仍然会收到此错误

简单(补丁)解决方案:删除 /usr/local/lib 中的 libiconv.*

建议:让 extconf.rb 对实际安装的 iconv 库进行稍微复杂的检查,并为用户提供更好的线索。 在这种情况下, libiconv 不会丢失。 实际上有两个 libiconvs,正在编译正确的头文件,并且正在链接一个旧库。 似乎是一个非常常见的问题,安装文件错误消息可以提供更多帮助。

而且我认为这可能是 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 和自制软件。 对我来说,这成功了:

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/Migration

+1 jfahrenkrug 所说的。 http://nokogiri.org/tutorials/installing_nokogiri.html上的安装指南,可能应该更新自制部分;

冲泡安装 libxml2 libxslt
酿造链接 libxml2 libxslt

brew install libxml2 libxslt libiconv
酿造链接 libxml2 libxslt libiconv

jfahrenkrug 的修复也对我有用

+1 对我有用

我已按照说明从 brew 构建 libxml2 和 libxslt。 我不能建造nokogiri。

当我尝试“brew install libiconv”时出现错误:

$ brew install libiconv
错误:没有可用的 libiconv 公式
Apple 在 OS X 中分发 libiconv,您可以在 /usr/lib 中找到它。
某些构建脚本无法正确检测到它,请检查现有的
解决方案的公式。

我正在安装全新的 Snow Leopard。 我宁愿不使用 MacPorts。

请帮忙。

@jseigler我正在运行 brew 0.8.1,我可以毫无问题地安装 libiconv。 尝试升级brew?

我和@jseigler 有同样的问题。 我在 OS X 10.7.3 上运行 brew 0.9。

下载 libiconv 并手动编译。
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz

如果您知道如何针对 brew 0.9 库安装 Nokogiri,请告诉我——我将更新安装文档。 但与此同时,作为一个主要使用 Linux 的用户,我恐怕帮不上什么忙。

@tenderlove ,有什么想法吗? 你<3 macs。 :) :) :)

在 OSX 10.7.3 上使用 brew 0.9 以下工作:

冲泡安装 libxml2 libxslt
酿造链接 libxml2 libxslt

从源代码安装 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
制作
须藤使安装

然后安装 nokogiri:
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/Cellar/libiconv/1.13.1/lib

@brennenf

不错的作品。 这也为我做了。

发布到 nokogiri.org 的说明:

http://nokogiri.org/tutorials/installing_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/Cellar/libiconv/1.13.1/lib

@brennenf您的修复让我得到了一个不错的“成功安装 nokogiri-1.5.2”,但是当我在我的 rails 应用程序中运行 bundle install 时,它仍然失败:“安装 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 并使用http://unfiniti.com/software/mac/jewelrybox/安装 rvm,现在它可以工作了,但我有一个警告说:
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 对我有用。

检查 libxml/parser.h... 否

缺少 libxml2。

我发现需要一个额外的步骤来解决 Mac OS X 10.8 Mountain Lion 上的 Homebrew 0.9 的上述问题,即创建一个“/usr/bin/gcc-4.2”链接:

冲泡安装 libxml2 libxslt
酿造链接 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
制作
须藤使安装
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/Cellar/libiconv/1.13.1/lib

brax4444 非常感谢,你是救生员! 由于错误,在您的最后一个命令上添加了 sudo 完美地工作:

错误:执行 gem 时 ... (Errno::EPERM)
不允许操作 - ~/.rvm/gems/ruby-1.9.3-p194/gems/nokogiri-1.5.5/.autotest

brax4444 是男人! 谢谢

想知道是否有人可以帮助新手:

Running Mountain Lion 10.8.2 w/ Homebrew。

从 nokogiri 1.5.2 开始 - 缺少典型的 libiconv。

在这个线程之间,特别是 Brax4444 和 nokogiri 上的安装教程: http ://nokogiri.org/tutorials/installing_nokogiri.html for Homebrew .9 我留下了以下 FUBAR:

我现在有 nokogiri 1.5.5,rails 正在寻找 1.5.2

尽管有无数个小时,仍然无法纠正 libiconv 问题。

由于缺少 gem > nokogiri 无法再执行 rails 命令:1.5.2

尝试安装 gem(这将是 1.5.5)或 rails new(我现在正在尝试任何东西......现在返回以下错误:错误:执行 gem 时......(Errno::EPERM)
不允许操作 - /usr/local/rvm/gems/ruby-1.9.3-p194/gems/nokogiri-1.5.5/.autotest

谁能救我? 我必须在明天之前上交应用程序。

你好!

感谢您提出这个问题! 您对使用 Nokogiri 的帮助请求将不会被拒绝!

但是,此问题已关闭,Nokogiri 的 Github 问题保留用于报告错误或提交补丁。 如果您在邮件列表中提出问题,Nokogiri 团队承诺有人会及时为您提供答案。

如果您想了解 Nokogiri 团队制定此政策的理由,请访问http://bit.ly/nokohelp。

非常感谢您的理解! 感谢您使用 Nokogiri。

brax4444,非常感谢,您的步骤帮助我解决了安装 pg gem 的类似问题。

由于捆绑安装较新版本(当前为 2.9.0 的 libxml2 和 1.1.28 的 libxslt),页面http://nokogiri.org/tutorials/installing_nokogiri.html上的说明现已过时。

@温斯顿

感谢您的评论,但是这个问题已经关闭了很长一段时间了。

如果你有关于 nokogiri 安装文档的更新,你可以发送一个拉取请求到:

https://github.com/sparklemotion/nokogiri.org-tutorials

或者您可以在新问题中更清楚地说明问题和解决方案(捆绑程序不安装 libxml2 或 libxslt ...您的意思是 brew?还是 mac 端口?或 ...?),我们将在可能的情况下解决它独立确认。

感谢您使用 Nokogiri!

@flavorjones对不起! 我会分叉的。

感谢您共同创作 Nokogiri。

我还需要实际安装 XCode 才能使其正常工作。

我需要安装命令行开发工具。

@dentarg谢谢,我遇到了同样的问题,在恢复我的 Mac 后,没有安装命令行开发人员工具。
用这个命令'xcode-select --install'来做

使用https://github.com/Homebrew/homebrew-dupes/blob/master/libiconv.rb

brew tab 自制软件/骗子
酿造安装 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。 使用“dupes”点击它会抱怨覆盖系统库,所以你需要--force它。 然后你只需要告诉 nokogiri 搜索/usr/local以查找 iconv 路径以在构建时传递给嵌入的 libxml2。 通过使用--use-system-libraries ,人们正在做的是绕过查找此库的需要,以便将其传递到内部 libxml2 构建中。

解决这个问题的一种方法是让自制软件为 libiconv 添加一个 pkg-config 配置,因为那时 nokogiri extconf.rb 将能够找到它。

另一种方法是在此处将/usr/local/include硬编码为搜索路径:

https://github.com/sparklemotion/nokogiri/blob/983ff1f2962c7f9fd20a6fc4c18784eccfff21c0/ext/nokogiri/extconf.rb#L132 -L133

我试图弄清楚如何从 ruby​​ 的 mkmf 中的路径中提取 /usr/local/include 并他妈的如果我能弄清楚如何做到这一点。 mkmf 中的间接层太深。 mkmf 中的 find_header() 方法当然可以找到 iconv.h,但我不知道如何提取有关它在哪个路径中找到它的信息。这实际上是 nokogiri 的正确修复,以便在其中找到头文件与 mkmf 可以找到头文件的方式相同。

似乎 nokogiri 在不需要外部 pkg-config 的情况下无法在 /usr/local/include 中找到简单的头文件这一事实已被破坏。 我可以看到路径硬编码是多么难看,但我不知道如何询问 mkmf find_header 在哪个目录中找到标题...

看起来这里还有一个错误 dir_config() 可以返回一个':'分隔的路径数组而不是两个路径的数组,但它似乎与解决这个问题没有任何关系:

https://github.com/sparklemotion/nokogiri/blob/983ff1f2962c7f9fd20a6fc4c18784eccfff21c0/ext/nokogiri/extconf.rb#L126 -L130

@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

@Reinmar你能试试我的建议吗? 特别是:

  1. brew link libiconv --force然后验证ls -la /usr/local/include/iconv.h是否存在
  2. 还验证ls -la /usr/local/lib/libiconv.dylib是否存在
  3. 然后简单地说: 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 中使用了 maany 选项卡)或者这是由 xterm 引起的一些问题。 不知道,但也许它会帮助某人。

除了@lamont-granquist 答案之外,如果您使用捆绑包并运行,您可以跳过 gem 安装:

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 。 为什么它起作用超出了我的理解,_[对苹果封闭生态系统的克制评论]_。 谢谢大家分享你的方法。

我不得不撕掉自制啤酒,所有的啤酒都从头开始重新安装它,然后它就起作用了

@doublerebel我认为您可能需要重新安装 xcode 和/或使用 xcode-select。 无论如何,你所做的一切都很混乱......

似乎使用当前版本的自制软件,我能够使用@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 和自制软件。 我还喜欢将它指向 /usr/local/opt/libiconv,而不是强制将其链接到 /usr/local/include。

@lamont-granquist 感谢您的解决方案。 我申请了每一个,你的那个是最终对我有用的东西。

运行'brew uninstall libxml2 libxslt'然后'sudo gem install nokogiri'为我修复了它

Whist 使用 RVM 并创建一个新的 gem 集,我必须执行以下操作:

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:

brew tap homebrew/dupes
brew update
brew uninstall libiconv
brew install libiconv

执行 nokogiri 安装:

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

这应该适用于 10.9 + 自制软件的每个人

希望得到一些关于 ^^^ 的反馈

为我工作,谢谢!

-克里斯

2014 年 8 月 28 日星期四下午 4:40,lamont-granquist [email protected]
写道:

希望得到一些关于 ^^^ 的反馈


直接回复此邮件或在 GitHub 上查看
https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53794057
.

出于好奇, brew uninstall libiconv是做什么用的? 这是否意味着您已经以某种方式安装了 libiconv?

@knu是的,这意味着您正在使用 Mac OsX 并且已经通过Homebrew而不是 MacPorts 安装了 libiconv。 这两个都是包管理器。 如果您不确定是否安装了 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 tap homebrew/dupes之后立即执行brew uninstall libiconv的意义,因为 libiconv 只能在点击欺骗后才能找到,因为它不在标准回购中。 是否存在以防万一,例如当您的自制软件安装以某种方式损坏时?

此外,正如您从“dupes”中 libiconv 的存在所知道的那样,iconv 是 OS X+Xcode 的一部分,您不需要通过 brew 添加。

我不使用 Homebrew,但 Homebrew 不应该触及 /usr/{include,lib} 下的任何内容,对吗? 或者是通过 brew 重新安装 libiconv 试图恢复那些被破坏的?

在安装了香草 Mountain Lion+Xcode+命令行工具的全新 MacBook Pro 上,我看到 /usr/include/iconv.h 和 /usr/lib/libconv.so 在那里,所以我一直想知道缺少这些的原因是什么文件可能是。

@lamont-granquist 谢谢。

我做了你列出的。 我遇到了以下权限问题:
您没有 /Library/Ruby/Gems/2.0.0 目录的写入权限。

显然我需要修复我的 rvm 并按照步骤安装它并继续我的捆绑安装过程。
rvm 安装 2.1.2
rvm 使用 2.1.2
宝石更新--系统

@knu是的,每次我升级操作系统或从时间机器恢复时,它似乎都会破坏自制软件,我必须重新安装所有东西。 这些指示尽可能悲观。 如果有人安装了干净整洁的 xcode 并且 libiconv 在 homebrew 中正确安装,那么最后一个 gem install 命令就足够了。

因此,事实证明 /usr/local/include/iconv.h 将 #define iconv_open 到 libiconv_open 并且由于某种原因,clang 会在 /usr/local/include 中通过 /usr/include 获取自制头文件,然后尝试链接针对 /usr/lib/libiconv.dylib。 诀窍是删除通过强制链接 libiconv 创建的 iconv.h 头文件。

TL; DR:关于如何“解决”这个问题(包括我的)的先前说明使情况变得更糟。

因此,有关如何修复 Mac 安装的最新说明:

确保正确安装了 Xcode 和命令行实用程序。 这解决了我没有 /usr/include/iconv.h 头文件的问题。 从对话框中选择“获取 Xcode”:

sudo xcode-select --install

您可能需要更新 homebrew 和 libiconv,以防它已经过时(并且如果您的 homebrew 中的 libiconv 是很久很久以前安装的)。 这可能完全是可选的,因为我们现在根本不会链接自制 libiconv:

brew update
brew tap homebrew/dupes
brew uninstall libiconv
brew install libiconv

不要链接 libiconv,因此它不会覆盖系统 libiconv(如果这给了你“没有这样的小桶”那很好,任何其他错误,你可能想回去升级 homebrew 和 libiconv):

brew unlink libiconv

构建 nokogiri:

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.dylibiconv.h

@SeanWangDev :+1:

OS X 10.9.4 小牛。
伙计们请帮助我。 我尝试了上面的每一种方法。 他们都没有为我工作。 我堆叠 gem install nokogiri 有/没有参数,我仍然收到错误:

$ 宝石安装 nokogiri
构建原生扩展。 这可能需要一段时间...
使用打包的库构建 nokogiri。
错误:安装 nokogiri 时出错:
错误:无法构建 gem 原生扩展。

/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby extconf.rb

使用打包的库构建 nokogiri。
检查 iconv.h... * extconf.rb 失败 *
由于某种原因无法创建 Makefile,可能缺乏必要
库和/或标题。 检查 mkmf.log 文件以获取更多详细信息。 你可以
需要配置选项。

提供的配置选项:
--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
--没有-make-prog
--srcdir=。
--curdir
--ruby=/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby
- 帮助
- 干净的
--使用系统库
--启用静态
--禁用静态
--with-zlib-dir
--没有-zlib-dir
--with-zlib-include
--without-zlib-include=${zlib-dir}/include
--with-zlib-lib
--without-zlib-lib=${zlib-dir}/lib
--启用交叉构建
--禁用交叉构建
/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 block in checks_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 checks_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 preserving_globals'
来自 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和/或访问苹果开发者下载站点并手动卸载并重新安装 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

如果你确实有那个文件,那么你已经从 macports 安装了 iconv,理想情况下你会摆脱这个。

然后尝试:

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

里面的东西应该可以工作。

@拉蒙特格兰奎斯特:+1:

@lamont-granquist 感谢您的指导,我正在了解正在发生的事情并开始着手修复。 但是,我仍然无法在我的任何 Mac 上重现该问题,因此无法确认修复是否有效。 你能提供复制的步骤吗?

好吧,我拥有这个 MBP 已经 3 年了,在 2 次操作系统升级和至少 3 次 TM 恢复之后,我的 /usr/include/iconv.h 不知何故消失了。 因此,对该文件进行核对可能会导致问题。 解决方案是正确地重新安装 xcode 和命令行工具。

此外,在调试人们建议做的一件事是“brew link libiconv --force”以便将其安装到 /usr/local/include/iconv.h 中——即使在执行“brew install libiconv”时会出现巨大的警告' 和 'brew link libiconv' 认为这是个坏主意。 那里的问题是您可以在拾取系统 /usr/lib/libiconv.dylib 时拾取该 iconv.h 并且在 iconv_open() 与 libiconv_open() 之间存在冲突并且由于它们不同而无法编译版本。

我不确定在这些情况下有什么需要解决的。 问题实际上在于破坏您的操作系统并需要将其恢复为更原始的形状。

有一件事我不明白,这就是为什么 nokogiri 的构建系统会找到 MacPorts 安装的 /opt/local/include/iconv.h 文件。 我不使用 MacPorts,所以没有调试它,但它会导致与 homebrew 将 iconv.h 直接链接到 /usr/local/include 时类似的问题。 如果可以让 nokogiri 停止这样做,它将对从 MacPorts 安装 libiconv 的人有所帮助。

$ ls -la /usr/include/iconv.h

-rw-r--r-- 1 根轮 7981 Sep 11 11:32 /usr/include/iconv.h

ls -la /usr/lib/libiconv.*
lrwxr-xr-x 1 根轮 16 Sep 11 01:03 /usr/lib/libiconv.2.4.0.dylib -> libiconv.2.dylib
-r-xr-xr-x 1 根轮 2088992 Sep 11 01:02 /usr/lib/libiconv.2.dylib
lrwxr-xr-x 1 根轮 20 Sep 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

$ brew tap homebrew/dupes
警告:已经点击!

$ brew 卸载 libiconv

正在卸载 /usr/local/Cellar/libiconv/1.13.1...

错误:权限被拒绝 - /usr/local/Cellar/libiconv/1.13.1/bin/iconv

它在该步骤上给了我权限错误

您需要修复 /usr/local 下的所有权限

无论您的登录名是什么,您都需要修复 perms,以便 root 不拥有 /usr/local 下的自制文件:

我的用户名是“lamont”,我可以使用id命令找到它:

% id -nu
lamont

要修复烫发,我会这样做:

% sudo chown -R lamont /usr/local

但是,您希望对该命令非常小心,并仔细检查您是否正确拼写了所有内容并获得了正确的用户名。

@lamont-granquist Homebrew 的 libiconv 包在放置 /usr/local/include/iconv.h 时不安装 /usr/local/lib/libiconv.dylib 吗? 我不明白的是,如果 /usr/local/include/iconv.h 被选中,为什么 /usr/local/lib/libiconv.dylib 在链接时没有。 通常当 -I/usr/local/include 在 CPPFLAGS 中时 -L/usr/local/lib 应该在 LDFLAGS 中。

至于环境破坏,当 OS X 上缺少 /usr/include/iconv.h 时,Nokogiri 至少可以建议(重新)安装命令行工具。

brew unlink libiconv
错误:没有这样的小桶:/usr/local/Cellar/libiconv

我忽略了消息并执行了后续步骤。 没有成功

@knu是的,我调查了一下,我想我迷失在 mkmf.rb 的曲折迷宫中。

@Ilovebarca rm -f /usr/local/include/iconv.h可能会有所帮助

@lamont-granquist
不,没有帮助。 顺便说一句,非常感谢您尝试帮助我。
这太疯狂了,我是 Mac 上的新手,我开始讨厌它 :))

我将在 iconv 检测过程中进行一些更改,并在 extconf.rb 中添加了对 OS X 上缺少的 /usr/include/iconv.h 的检查。 这是一项正在进行的工作,欢迎测试人员!

我一直在经历 github 问题、堆栈交换、谷歌等,到目前为止唯一有效的是@lamont-granquist 建议。 设置使用:

OSX 10.9.5
rbenv

我知道很多人不知何故破坏了他们的 OS X 环境,他们甚至没有注意到这一点。 一个问题是缺少 Xcode 命令行工具,另一个是 Homebrew。 nokogiri 的下一个版本将在进入构建之前尝试检测这种破损并警告用户。

感谢您的支持!

谢谢@lamont-granquist,我已经为这个问题苦苦挣扎了一个星期,最后你重新安装 libiconv 的解决方案可以工作了……这真是一种解脱!

@jomz适用于 osx 10.10。 谢谢:+1:

从今天全新安装的 10.10 开始:

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

这安装了 ruby​​ 版本 2.1.5p273 和 nokogiri 1.6.4.1。 大概您可以通过自制软件和 ruby​​gems 强制安装这些版本。

从 10.9 升级的 10.10 安装,已经安装了 homebrew 和 ruby​​:

brew install libxml2 libxslt
gem install nokogiri -- --use-system-libraries

我不确定是否有必要重新/安装 libxml2 和/或 libxslt,但这对我有用。

我相信我们已经在此处更新的安装教程中捕捉到了这一点:

http://www.nokogiri.org/tutorials/installing_nokogiri.html

如果没有,请告诉我,我会重新打开。

感谢教程链接! 当我指定文件路径时,它对我有用,如“使用非标准 libxml2 / libxslt 安装”中所述。 (似乎 OS X 10.6.8 中的 /usr/bin 被认为是系统库的非标准位置。)

为了找到文件路径,我使用了终端命令which xml2-configwhich xslt-config 。 也许更新教程以建议这样做?

此页面是否有帮助?
0 / 5 - 0 等级