首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么在Mac OS上安装Nokogiri失败,并缺少libiconv?

为什么在Mac OS上安装Nokogiri失败,并缺少libiconv?
EN

Stack Overflow用户
提问于 2011-04-03 09:54:50
回答 26查看 76.5K关注 0票数 162

我一直在尝试在Mac OS 10.9.3上安装Nokogiri,无论我如何尝试,最终安装都会失败,并显示以下错误消息:

代码语言:javascript
运行
AI代码解释
复制
$ 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构建和安装libxml2和libxslt以及从源代码构建libiconv (如“Installing Nokogiri”中所述))之后,错误仍然存在。

当尝试运行Nokogiri的安装时,libxml2和libxslt似乎可以正常运行,但libiconv却不行。

有没有更了解这些的人知道如何安装Nokogiri?

EN

回答 26

Stack Overflow用户

发布于 2011-11-30 08:26:58

我终于能够解决这个问题了。上面的解决方案都不能完全解决我的问题。

当我尝试在OSX Lion 10.7.2上使用gem install nokogiri时,我得到了这个错误。首先,这个错误通过说libiconv缺失来掩盖真正的问题,因为即使nokogiri找不到libxslt或libxml2,你也会得到同样的错误,在我的例子中,它找不到。

因此,我在http://nokogiri.org/tutorials/installing_nokogiri.html上的Homebrew部分(稍微做了一些修改,以适应更新版本的libxml2)中遵循了说明:

代码语言:javascript
运行
AI代码解释
复制
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站点上的说明进行了尝试

代码语言:javascript
运行
AI代码解释
复制
gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26

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

代码语言:javascript
运行
AI代码解释
复制
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):

代码语言:javascript
运行
AI代码解释
复制
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进程失败,出现以下错误:

代码语言:javascript
运行
AI代码解释
复制
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的最新版本来替换它们。这篇文章比我更好地解释了它,所以请阅读上面的链接以获得具体的说明。

一旦这些文件被替换,我就运行

代码语言:javascript
运行
AI代码解释
复制
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

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

票数 20
EN

Stack Overflow用户

发布于 2014-11-28 04:22:17

我只是在人群中加入我的声音,但是mkmf.log说了一些关于找不到x86_64架构的符号的事情。我偶然发现了这个解决方案:

代码语言:javascript
运行
AI代码解释
复制
sudo env ARCHFLAGS="-arch x86_64" gem install nokogiri -- --use-system-libraries

对于最初的提问者来说,这可能解决不了任何问题,但这可能会对某些人有所帮助。

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

票数 18
EN

Stack Overflow用户

发布于 2019-09-10 12:00:07

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

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

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5528839

复制
相关文章
HttpClient上传文件传入MultipartFile类型
通常我们在使用httpclient的时候,一把都是使用get或者postd的方式传输一些数据。在近期的项目中有这样的一个需求,我需要通过httpclient去调用一个写好的文件上传的接口,接口中是使用MultipartFile 来接受文件类型参数的。在这种情况下我们就开辟一个HttpClient中的高级功能了。直接上代码,封装了一个工具类:
一缕82年的清风
2021/12/06
5.5K1
Asp.Net Core中HttpClient的使用方式
在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数、使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变化,本次就讲解一下Asp.Net Core2.1前后使用的两种方式。
心莱科技雪雁
2019/03/11
1.2K0
Asp.Net Core中HttpClient的使用方式
.NET HttpClient扩展
/// <summary> /// HttpClient扩展类 /// </summary> public static class HttpClientExtensions { /// <summary> /// HttpClient请求封装 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="
guokun
2020/09/03
4560
如何在模拟器中测试Windows Phone 8的NFC应用
众所周知Window Phone 8 SDK的模拟器不支持NFC功能的测试。如果您开发了一款基于NFC功能的应用,那么意味着您测试时需要两台支持NFC的Windows Phone设备在手,这样的配置恐怕会让很多独立开发者望而却步。
星哥玩云
2022/07/04
2.4K0
如何在模拟器中测试Windows Phone 8的NFC应用
HttpClient测试框架
HttpClient是模拟Http协议客户端请求的一种技术,可以发送Get/Post等请求。 所以在学习HttpClient测试框架之前,先来看一下Http协议请求,主要看请求头信息。
yuanyuan
2019/09/02
1.1K0
HttpClient测试框架
HttpClient在HTTP协议接口测试中的使用
TTP协议的接口测试中,使用到最多的就是GET请求与POST请求,其中POST请求有FORM参数提交请求与RAW请求,下面我将结合HttpClient来实现一下这三种形式:
流柯
2018/08/30
1.9K0
如何在 Android 模拟器中模拟 GPS 位置
可以通过 Telnet 连接到仿真器。然后你有一个模拟器控制台,可以让你输入某些数据,比如地理定位、网络等。
张云飞Vir
2021/12/06
9.8K0
如何在 Android 模拟器中模拟 GPS 位置
HttpClient4模拟表单提交[通俗易懂]
//servlet的访问地址是:http://localhost:80/testjs/servlet/FormServlet
全栈程序员站长
2022/09/15
8680
使用HttpClient测试SpringMVC的接口
最近在写SSM创建的Web项目,写到一个对外接口时需要做测试,接受json格式的数据。在线测试需要放公网地址,无奈localhost无法访问,测试工具需要安装,不想折腾,想到写爬虫的时候用到的HttpClient可以发Post请求,于是进行了尝试。
geekfly
2022/05/06
3260
ASP.NET Core 单元测试:如何 Mock HttpClient.GetStringAsync()
在 ASP.NET Core 单元测试中模拟HttpClient.GetStringAsync() 的技巧。
Edi Wang
2021/05/27
1.4K0
httpclient接口测试中重试控制器设置
本人在使用httpclient做接口测试的过程中,之前并没有考虑到请求失败自动重试的情况,但有时又需要在发生某些错误的时候重试,比如超时,比如响应频繁被拒绝等等,在看过官方的示例后,自己写了一个自动重试的控制器。分享代码,供大家参考。
FunTester
2019/09/25
9010
asp.net core之HttpClient
本文介绍了ASP.NET Core中的HttpClient和HttpClientFactory的作用、用法以及最佳实践。通过示例代码的展示,读者可以了解如何使用HttpClient发送HTTP请求并处理响应,以及如何使用HttpClientFactory来解决HttpClient的一些问题,如资源泄漏和性能问题。同时,本文还强调了HttpClientFactory的优势,如更好的性能、资源管理和可配置性。通过深入理解和应用HttpClient和HttpClientFactory,开发人员可以更好地与外部服务进行通信。
饭勺oO
2023/10/18
4650
asp.net core之HttpClient
MyBatis中传入参数parameterType
Mybatis的Mapper文件中的select、insert、update、delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型。
赵哥窟
2019/07/03
3K0
HttpClient-代理IP、模拟浏览器
创建HttpHost对象,设置代理IP(如114.113.126.82,端口80)。
wangmcn
2022/07/25
6880
HttpClient-代理IP、模拟浏览器
如何在 CMD 启动的软件传入带空格的路径
在使用 CMD 命令的时候,会将传入的命令按照空格分为多个不同的命令,但是路径经常是带有空格的。特别是想将参数传入到通过命令行启动的软件里面,可以如何做?
林德熙
2019/06/15
4.2K0
HttpClient参观记:.net core 2.2 对HttpClient到底做了什么?
.net core 于 10月17日发布了 ASP.NET Core 2.2.0 -preview3,在这个版本中,我看到了一个很让我惊喜的新特性:HTTP Client Performance Improvements ,而且在Linux上性能提升了60% !
ShenduCC
2018/12/05
1.1K0
HttpClient参观记:.net core 2.2 对HttpClient到底做了神马
.net core 于 10月17日发布了 ASP.NET Core 2.2.0 -preview3,在这个版本中,我看到了一个很让我惊喜的新特性:HTTP Client Performance Improvements ,而且在Linux上性能提升了60% !
ShenduCC
2019/06/11
5800
如何在Visual Studio中调试.NET源码
In order to configure Visual Studio 2013 do the following in the Tools -> Options -> Debugging -> General menu:
卡尔曼和玻尔兹曼谁曼
2019/01/22
2K0
如何在Visual Studio中调试.NET源码
httpclient模拟post请求json封装表单数据
以下代码包括最基本的GET、POST、JSON参数的POST方式的请求。(相当于POSTMAN中使用raw编写的参数)
I Teach You 我教你
2023/07/18
4050
点击加载更多

相似问题

如何在测试中模拟Angular 4.3 httpClient错误响应

10

在单元测试中模拟HttpClient

230

如何在SoapUI中测试对模拟服务的传入响应?

11

角度:单元测试中HttpClient的模拟

11

如何在单元测试HttpClient时模拟GetDiscoveryDocumentAsync?

2120
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文