ChatGPT解决这个技术问题 Extra ChatGPT

为什么在 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

在网络上找到了很多帮助之后,包括使用 brew 构建和安装 libxml2 和 libxslt 以及从源代码构建 libiconv(如“Installing Nokogiri”中所述),错误仍然存在。

当尝试运行 Nokogiri 的安装时,libxml2 和 libxslt 似乎很好,但 libiconv 却没有。

任何对这些事情有更好了解的人都知道如何安装 Nokogiri 吗?

您没有显示您尝试使用的确切命令,因此我们将在黑暗中射击试图回答。我总是使用 gem install nokogiri,但后来我使用 RVM 来管理我的 Mac OS Ruby 安装。 libxml 和 libxslt 与 iconv 无关,因此我建议您在他们的支持论坛 Nokogiri-talk 上提问。我不记得在安装 Nokogiri 时遇到任何 iconv 问题,而且我在一堆机器上都有它。
与此同时,我在 github 上打开了一张票:github.com/tenderlove/nokogiri/issues/442,其中包含更多信息。
这是解决 OSX El Capitan 上相同问题的链接,estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sudo gem install nokogiri”。不要使用 sudo 安装 gems 或修改默认的 Ruby。而是使用 rbenv 或 RVM 来管理单独的 Ruby。这在 Stack Overflow 上被多次介绍。
您在安装 nokogiri 之前尝试过 uninstalling xz 吗?

G
Glorfindel

我遇到过同样的问题。不幸的是,“Installing Nokogiri”没有涵盖 Iconv 问题。这是我解决问题的方法。

首先安装homebrew,它会让您的生活更轻松。如果您已经安装了它,请务必通过更新获取最新的公式,如下所示:

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

一旦我完成了“brew install libiconv”和“brew link libiconv”,我就能够成功安装 nokogiri。我希望这意味着我对 brew 安装的特定版本的 libiconv 没有硬依赖。
当我尝试 brew install libiconv 时,它会吐出:错误:没有可用的 libiconv 公式 Apple 将 libiconv 与 OS X 一起分发,您可以在 /usr/lib 中找到它。某些构建脚本无法正确检测到它,请检查现有公式以获取解决方案。
如果您正在运行 Mavericks,您可能需要安装 Xcode 的命令行工具:xcode-select --install。这解决了我的问题。
如果您仍然无法通过 brew install libiconv 获得正确的公式,请使用:brew tap homebrew/dupes
OS X Yosemite (10.10) 我不必做 brew 的事情;只是 xcode-select --install 为我解决了这个问题。
C
Community

尝试使用系统库。 OSX 较新版本自带 libiconv,但默认安装脚本似乎有问题

gem install nokogiri -- --use-system-libraries

编辑:如果使用捆绑器,如 Geoff 所述,您可以执行以下操作:

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

如果使用捆绑器 - 您可以运行“bundle config build.nokogiri --use-system-libraries”
最后,“bundle config build.nokogiri --use-system-libraries”起作用了。我讨厌这种情况发生
在 Mac OS 10.10 Yosemite 上为我工作。
为什么我在 gem install 命令中间需要额外的“--”?
我在 10.10.3 上失败了。带有 libxml2 version 2.6.21 or later is required! 的 Xcode 6.3。
M
Micah Winkelspecht

@Cory 的解决方案包含正确的答案,但 Mavericks 的解决方案实际上比顶级解决方案简单得多,所以我只用必要的步骤重新发布。

在小牛队(OSX 10.9+)上:

安装 Xcode 命令行工具:

xcode-select --install

然后安装你的宝石:

gem install nokogiri

在优胜美地工作。很高兴我向下滚动并且没有使用旧答案。
节省大量时间,感谢您的提示!在小牛队对我很有魅力
您是否尝试使用我的解决方案?它不需要 xcode 安装。
这是来自 Nokogiri 文档 (nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x) 的官方解决方案,也是唯一适用于 El Capitan 的解决方案。接受的解决方案在那里不起作用。
在 El Capitan 上为我工作,真令人气愤。感谢 Nokogiri 文档 @Johannes 的链接 - 非常有用。每个人都应该远离那些说“使用系统库”的解决方案——不好的建议。
M
Micah Winkelspecht

我终于能够解决这个问题。上述解决方案都没有为我完全解决它。

在 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

但是,这仍然失败,因为从源代码构建 libxslt 时,它将 /include 文件夹安装在一个时髦的地方。因此,您需要分别指定 libinclude 文件夹,如下所示:

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

再次,一切都很好。我希望这对其他人有帮助。


我遇到了同样的问题,但我发现从 opt/local/lib 中删除以下文件:libz.dylib 和 libz.1.dylib 并按照这些说明的其余部分进行操作。
我认为 /opt/local 表示 MacPorts 安装。如果您正在运行自制软件和 Macports,您最终会遇到一些时髦(如您的案例所示)。最好的解决方案是卸载 Macports,并使用 homebrew 作为你的包管理器。
我在下面为 Mavericks (OSX 10.9+) 添加了一个新的更简单的解决方案。
n
nbering

只是将我的声音添加到人群中,但 mkmf.log 说了一些关于无法找到 x86_64 架构的符号的内容。我偶然发现了这个解决方案:

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

可能无法为原始提问者解决任何问题,但这可能会对某人有所帮助。

旁注:nokogiri 一直是我使用 ruby 应用程序的最大障碍。每次有人依赖不同的版本时,我都必须弄清楚如何构建它。我的问题每次都不一样。


同意你的 nokogiri 观点。每一个。单身的。时间。
以这种形式不适合我,但 ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-libraries 工作...
这也适用于我,更简单的解决方案,我没有使用 ARCHFLAGS,只是 sudo gem install nokogiri -- --use-system-libraries
N
Neodelf

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

这在macos上对我有用。它也适用于版本 1.6.6.4


在 Catalina 上没有为我使用 --with-xml2-include 选项...gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
这在 2021 年的 Catalina 上对我有用。谢谢!
谢谢你,谢谢你,谢谢你!!!这是在大苏尔唯一对我有用的东西!!!!!!!
K
Kevin Ng

我正在使用.. OS X 10.9.4 Homebrew 0.9.4

这是我从这个线程中成功安装 nokogiri,修复丢失的 libiconv 的总结。

安装 Homebrew 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

D
Dave Sag

我在 Yosemite 运行 Ruby 2.1.4 时解决了这个问题

确保您已安装 xCode 6.1,然后 xcode-select --install,然后在 AppStore 中单击更新并安装最新版本的命令行工具(显然 xcode-select --install 不这样做 - 叹息)然后捆绑安装正常工作。

我也做了一个brew install libiconv,但我不相信需要这一步。


我不认为 brew install libiconv 是必要的——我从不费心寻找合适的包,这对我来说很好。当然,从我之前用 ruby 2.1.1 安装 nokogiri 时它可能就在我的机器上。
“在 AppStore 中单击更新并安装最新版本的命令行工具(显然 xcode-select --install 不这样做 - 叹息)” - 没有可用的更新。如何从 Xcode 更新我的命令行工具?它们不会出现在首选项窗格的“下载”部分。
这对我有用,无需去应用商店。我更新了命令行工具和操作系统(到 Yosemite),然后运行 xcode-select --install 并且我能够安装 Nokogiri。
我必须这样做:xcode-select --install .. brew install libxml2 .. bundle config build.nokogiri --use-system-libraries .. bundle install
t
the Tin Man

我尝试了很多东西,但对我没有任何效果。然后我终于找到了 iconv documentation,它拯救了我的一天!


非常感谢。它也拯救了我的一天。
S
Stéphane Akkaoui

查看 mkmf 文件,似乎 nokogiri(或 gem,我不知道)尝试在 /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 中需要修复一些东西......

高温下,


S
SupaIrish

从 Homebrew 0.9 中删除了 libiconv 现在建议从源代码编译 libiconv,然后在安装 nokogiri gem 时引用安装。请参阅 Nokogiri install page 上 Homebrew 0.9 部分下的 Nokogiri 安装说明


截至今天,我能够运行 $ brew install libiconv 并下载并安装了 libiconv-1.14.tar.gz
s
scotchi

查看 gem 构建目录中的 mkmf.log 文件(例如 /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log)。那有更多的信息。就我而言,当我点击它时,Nokogiri 专门将 /opt/local/lib 添加到库搜索路径中,而 GNU Backgammon 在那里安装了一个不兼容的 libiconv。


M
Mick West

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

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


我已经使用 MacPorts 安装了 libxml2 和 libxslt,但 /usr/local/lib 中没有 libiconv.* 文件
R
RacsO
$ 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


M
Mike Park

我在山狮上遇到了类似的麻烦。原来我之前通过 rvm 包安装了 libiconv,而这对于 ruby 1.9.3/Mountain Lion/nokogiri 不再需要。

按照 https://rvm.io/packages/ 的建议,我删除了我的 $rvm_path/usr 目录并重建了 ruby 1.9.3。此后安装 nokogiri 是一个简单的 gem 安装。不要搞乱 brew/macports/手动源代码安装!


S
Sam Rosen

您也可以在 Mavericks 上执行此操作:

gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr /include/libxml2

只要确保你已经安装了 xcode


同样的解决方案也适用于 10.7.5: gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
S
Sam Figueroa

我今天在 OS X 10.10 Yosemite 上与 Nokogiri 战斗了一段时间

由于某种原因,我的环境搞砸了。

which bundlewhich 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

事后看来(始终是 20/20),我可能只是调整了我的 PATH 环境变量以首先添加 rbenv。
C
Chen Kinnrot

这个对我有用

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/local/Cellar/libiconv/1.14


这是 --use-system-libraries 和 --with-iconv-dir 的组合为我做的
这在mac m1上对我有用
I
Ilake Chang

您需要将自制软件升级到 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

您应该仔细检查文件夹库版本。


链接和 sudo 会破坏事情。出于几个原因,它们仅是小桶。使用 brew 公式,因为这样更容易维护。 brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv
C
Community

家酿用户

如果您使用自制软件,解决此问题的正确解决方案:

xcode-select --install

从对话框中选择“获取 Xcode”。

brew unlink libiconv
gem install nokogiri

xcode-select 步骤修复了您的 Xcode 安装和 Xcode Command Line Utils 安装。我发现我没有 /usr/include/iconv.h 由于操作系统升级或从备份恢复的某种问题。如果您在运行 xcode-select 后没有该头文件和 /usr/lib/libconv.dylib,那么您很可能需要将 Xcode 从 Application 文件夹拖到垃圾箱并重新安装,然后手动下载 Xcode 命令行工具从 https://developer.apple.com/downloads/index.action 并安装它。

然后你需要从自制软件中取消链接 libiconv。你不需要这个。而且clang实际上会在/usr/include/iconv.h上选择/usr/local/include/iconv.h,并将#define iconv_open链接到libiconv_open,然后链接到没有libiconv_open的/usr/lib/libiconv.dylib是导致 mkmf 无法找到 libiconv 的原因。您需要做的是删除 iconv.h 的链接,以便 nokogiri 找不到它。

然后正常构建nokogiri。

对于新用户,您需要做的就是使用 xcode-select 安装 xcode 并安装 nokogiri,但如果您发现了这个问题,那么可能您的安装很糟糕,而不是全新安装的 Mavericks。

这里的其他一些答案肯定是不正确的。他们中的大多数人试图在自制程序之外使用 libiconv,这是完全没有必要的。 brew link libiconv 的答案实际上导致了 clang 变得混乱并尝试读取自制头文件并链接到系统库的问题。建议 --use-system-libraries 的答案很差,因为 nokogiri 需要与其捆绑的 libxml2 和 libxslt 库链接,因为这些库的其他版本与它不兼容。希望您从源代码编译的答案实在是过于复杂了。

TL;博士:

升级和/或修复您的 Xcode 安装

取消链接您的自制 libiconv,因为尝试使用它只会导致问题

正常构建 nokogiri

RVM 用户

旧的 RVM 安装可能有一个 libiconv 隐藏在您的 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

在安装了 MacPorts libiconv 的情况下确认 gem install nokogiri -- --with-iconv-dir=/opt/local 工作正常
a
aaron blythe

今天早上我遇到了这个......在升级到小牛队之后。我们做了很多事情。但是,如果有人遇到这个问题,这里有一些事情可以尝试。

我运行了“xcode-select --install”,然后安装了命令行工具(很惊讶这没有在 OS 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
...

这些文件在文件系统上不存在...

在所有这些更改移动到新的终端窗口之后(所以一切都是新鲜的)。 vagrant-berkshelf(反过来安装 nokogiri)的安装工作正常。

注意:在新窗口中运行“env”时,不再有 CC 或 CXX 设置...

不确定其中的关键部分,或者顺序是否重要,但尝试重新创建似乎在使其正常工作中发挥作用的部分。


您确定命令 gem install nokogiri 成功吗?带有“已安装”消息或安装成功?
是的。当我在我的 Mac 上构建东西时,我已经重新安装了 rvm 和 oh-my-zsh。我无法弄清楚的是如何在 rvm gemset 上安装 nokogiri。当我切换回“rvm 使用系统”时,我可以在 OS X ruby 2.0.0p451 上的 1.5.6 之上安装 nokogiri 1.6.3.1。
最后对我来说是stackoverflow.com/questions/19643153/… brew uninstall apple-gcc42 brew install apple-gcc42
r
rexmadden

根据文档,从 OSX 10.9 和 Homebrew 9.5+ 开始,您可能缺少开发工具。

Nokogiri installation

故障排除

如果您在提及缺少 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 的 clang 编译器上得到验证。


t
the Tin Man

当我将我的 Mac OS 升级到 Yosemite 时,我遇到了这个问题。我能够通过这样做来解决这个问题:

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

C
Community

我有一个类似的问题,并且接受的答案曾经对我有用。但是,现在,我看到一条新的错误消息,其中缺少 gmkdir 命令,如以下问题所示:

gem install nokogiri -v '1.5.11' failed due to make: /usr/local/bin/gmkdir: No such file or directory

对我有用的是首先进行一些清理:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

然后是 brew unlink libiconv 以及您需要取消链接的任何其他内容(与 brew doctor 核对)。然后,神奇的两行(从链接的答案复制):

brew install coreutils
gem install nokogiri

P
Pikachu-go

在开始卸载和安装任何东西之前要遵循的简单步骤。检查您是否安装了 CLT(安装了命令行工具):

brew config

如果安装不需要重新安装,请在此处查看 CLT 版本。

这意味着问题在于您拥有重新安装捆绑器 gem 的权限,使其不是 sudo。使用 gem uninstall bundler 卸载 bundler 重新安装 gem bundler gem install bundler

这里最重要的一点是安装 bundler gem 的权限,它永远不应该被 sudoed。


B
Brian Jensen

首先确保您遵循 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 版本创建一个 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

T
TsenYing

就我而言,(与 scotchi 一样)构建失败是因为 /opt/local/lib 中的 iconv 库不兼容。默认情况下,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

g
gaston

blog post建议手动安装 libiconv。

随后,nokogiri 可以安装一些开关,告诉它在哪里可以找到 libiconv(请参阅博客文章)。

附带说明:安装 nokogiri 后,我设法安装了 gollum(安装也失败了,因为它找不到 iconv)。现在我仍然面临问题,因为当我启动 gollum 时,Python 崩溃了。


D
Darren Weber
$ 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-p247 中缺少的 /lib/iconv/iconv.so 文件,该文件存在于 2.0.0-p0 gems 安装中。

$ 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,但这个问题是特定于 gem 安装的,应该在上游修复!
这个答案与 nokogiri 的构建所依赖的 C libiconv 库无关。答案真的应该被删除。
C
Cody Barr

在运行 ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1 之前,我必须先安装 gcc


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅