OS X Lion,尝试Nokogiri安装 - 缺少libxml2

时间:2012-02-03 19:32:00

标签: ruby-on-rails osx-lion nokogiri

sudo gem install nokogiri
Building native extensions.  This could take a while...
ERROR:  Error installing nokogiri:
    ERROR: Failed to build gem native extension.

        /Users/sajeev86/.rvm/rubies/ruby-1.8.7-p352/bin/ruby extconf.rb
checking for libxml/parser.h... no
-----
libxml2 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.

我无法安装Nokogiri。这对我来说已经有一段时间了。我也通过MacPorts和Homebrew安装了依赖项。

我有一种感觉,正确的目录没有互相指向?但是还不清楚如何修复。

17 个答案:

答案 0 :(得分:43)

在Mavericks中,使用Homebrew安装库并在安装gem之前设置NOKOGIRI_USE_SYSTEM_LIBRARIES=1对我来说是个窍门。

汇总:

  • 如果以前安装过,请卸载gem:
    $ gem uninstall nokogiri

  • 使用Homebrew安装libxml2libxsltlibiconv
    $ brew install libxml2 libxslt libiconv

  • 安装gem,指定要链接的库的路径:
    $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

答案 1 :(得分:32)

这里的其他答案绝对 none

在最新版本的Mavericks中,唯一能成功的方法如下:

$ brew install libxml2 libxslt libiconv
$ sudo gem install nokogiri -v '1.6.5' -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib

答案 2 :(得分:16)

狮子座上发生了同样的问题。花了几个小时阅读帖子,尝试自制软件,macports等。当我找到这个post并阅读.rvm / gems / ruby​​-1.8.7-p358 / gems / nokogiri-1.4.4 / ext /的内容时nokogiri / mkmf.log,我看到了:

find_header: checking for libxml/parser.h... -------------------- no

"/usr/bin/gcc-4.2 -E -I. -I/Users/me/.rvm/rubies/ruby-1.8.7-p358/lib/ruby/1.8/i686-darwin10.8.0 -I. -I-I-I/opt/local/include -I-I-I/usr/local/include -I-I-I/Users/me/.rvm/rubies/ruby-1.8.7-p358/include -I-I-I/usr/include -I-I-I/usr/include/libxml2 -I/opt/local/include/libxml2 -I/usr/local/include/libxml2 -I/Users/me/.rvm/rubies/ruby-1.8.7-p358/include/libxml2 -I-I/opt/local/include -I-I/usr/local/include -I-I/Users/me/.rvm/rubies/ruby-1.8.7-p358/include -I-I/usr/include -I-I/usr/include/libxml2 -I/opt/local/include -I/usr/local/include -I/Users/me/.rvm/rubies/ruby-1.8.7-p358/include -I/usr/include -I/usr/include/libxml2  -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -g -O2  -fno-common -pipe -fno-common    -g -DXP_UNIX -O3 -Wall -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline  conftest.c -o conftest.i"
checked program was:
/* begin */
1: #include <libxml/parser.h>
/* end */

但是,gcc-4.2不存在:

$ ls /usr/bin/gcc*
/usr/bin/gcc

因此,我能够通过将gcc-4.2作为符号链接到gcc来解决问题并安装nokogiri。

sudo ln -s gcc gcc-4.2

答案 3 :(得分:10)

我遇到了与Mavrick相同的问题,解决方案是

xcode-select --install

然而,由于苹果下载页面没有公开提供该安装程序,因此无效。 因此,如果您想拥有Mavricks的命令行工具,您需要拥有一个付费帐户,那么只有您才能安装它。 一旦你安装它,你就不会面对Nokogiri这个问题了。

答案 4 :(得分:9)

检查错误消息中给出的URL(http://nokogiri.org/tutorials/installing_nokogiri.html)我认为问题是您使用的是什么版本的Homebrew?

brew -v

我更新到0.8+

brew update
brew upgrade

然后再次尝试安装:

brew install libxml2 libxslt
brew link libxml2 libxslt
gem install nokogiri

答案 5 :(得分:6)

brew install libxml2 libxslt 
gem install nokogiri -v '1.6.5' -- --use-system-libraries

答案 6 :(得分:6)

至于我,它有帮助:

brew install libxml2 libxslt

如果权限被拒绝sudo chown -R $USER /Library/Caches/Homebrew/

sudo env ARCHFLAGS="-arch x86_64"

export NOKOGIRI_USE_SYSTEM_LIBRARIES=1

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri

答案 7 :(得分:3)

晚会,但如果在使用MacPorts时有人仍然遇到此问题:

将/ include目录添加到.profile文件中的PATH中,以便nokogiri知道在哪里找到它。

e.g。

MacPorts会写入您的.profile文件,默认情况下会添加以下行:

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

首先,像这样添加/ include路径:

export PATH=/opt/local/bin:/opt/local/sbin:/opt/local/include/:$PATH

然后,从同一个终端窗口运行:

source ~/.profile

(这告诉终端重新检查.profile文件是否有任何更改)

最后,尝试从同一个终端窗口安装gem。

sudo gem install nokogiri

答案 8 :(得分:3)

在优胜美地我用过:

brew install libxml2 libxslt
sudo gem install nokogiri -v '1.6.5' -- --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib

非常接近上述某些命令但没有libconv

答案 9 :(得分:2)

对于我有点过时的系统遇到上述问题,特别是:

FENG-SHUI:demo Eric$ brew install libxml2
==> Downloading ftp://xmlsoft.org/libxml2/libxml2-2.9.0.tar.gz
######################################################################## 100.0%
==> Downloading patches
######################################################################## 100.0%
######################################################################## 100.0%
==> Patching patching file threads.c patching file xpath.c
==> ./configure --prefix=/usr/local/Cellar/libxml2/2.9.0 --without-python
==> make
==> make install
==> Caveats This formula is keg-only: so it was not symlinked into /usr/local.

Mac OS X already provides this software and installing another version in parallel can cause all kinds of trouble.

Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables:

    LDFLAGS:  -L/usr/local/opt/libxml2/lib
    CPPFLAGS: -I/usr/local/opt/libxml2/include

Error: Failed to create: /usr/local/opt/libxml2 
Things that depend on libxml2 will probably not build.
    ==> Summary /usr/local/Cellar/libxml2/2.9.0: 273 files, 11M, built in 2.0 minutes 

FENG-SHUI:demo Eric$ brew install libxml2 libxslt 
Error: libxml2-2.9.0 already installed 
Error: /usr/local/opt/libxml2 not present or broken Please reinstall libxml2. Sorry :(

这是让libxml2和libxslt愉快地运行的神奇公式:

# latest version 2.9.0
brew install libxml2

# installing libxslt from source code
# get latest libxslt from ftp://xmlsoft.org/libxml2/libxslt-git-snapshot.tar.gz..
# then
./configure --prefix=/usr/local/Cellar/libxslt/1.1.28 --with-libxml-prefix=/usr/local/Cellar/libxml2/2.9.0
make
sudo make install

# installing nokogiri with this new compiled libs
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

感谢这位家伙:https://gist.github.com/fabioyamate/443160

希望这有助于某人!

答案 10 :(得分:1)

我一直在努力工作几个小时,直到找到这篇博文:http://www.markhneedham.com/blog/2010/07/08/installing-ruby-1-9-2-with-rvm-on-snow-leopard

运行命令

  

文件/usr/local/lib/libxml2.2.dylib

在终端返回

  

/usr/local/lib/libxml2.2.dylib:Mach-O动态链接共享库i386

这意味着我的libxml2.2是为32位系统编译的,所以我不得不为64位操作系统(Lion)重新编译libxml2

首先我从ftp://xmlsoft.org/libxml2下载了LATEST_LIBXML2并运行了以下命令:

  

tar xzvf LATEST_LIBXML2

     

cd libxml2-2.8.0

     

./ configure --with-python = / System / Library / Frameworks / Python.framework / Versions / 2.3 /

     

然后我从同一站点下载了LATEST_LIBXSLT并运行了这些命令:

  

tar xzvf LATEST_LIBXSLT

     

cd libxslt-1.1.26

     

./配置

     

     

sudo make install

正在运行

  

文件/usr/local/lib/libxml2.2.dylib

再次返回

  

/usr/local/lib/libxml2.2.dylib:Mach -O 64位动态链接共享库x86_64

我终于可以安装nokogiri了!

答案 11 :(得分:1)

这对我在OSX上起作用 - 与@ remeberer的答案相同,但是有完整的路径。

  

sudo ln -s / usr / bin / gcc /usr/bin/gcc-4.2

答案 12 :(得分:1)

尝试将--with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib添加到您的命令中,假设它是MacPorts libxml2的位置。

答案 13 :(得分:1)

我必须使用此命令才能工作:

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

(来源:http://www.virtlab.cx/ruby-fix-error-install-nokogiri-yosemite/,非常感谢作者)

答案 14 :(得分:0)

对我而言,我只是做了以下

xcode-select --install
gem install nokogiri

要进行更深入的问题排查,请结帐Installing Nokogiri

答案 15 :(得分:0)

如果您要安装较旧版本的Nokogiri,即1.6之前的版本,这可能有所帮助:

Nokogiri installation guide中,他们提到:

  

因为Nokogiri需要编译并动态链接   无论是libxml2还是libxslt,它都因此而享有盛誉   安装起来很复杂。

     

从Nokogiri 1.6开始,捆绑了libxml2和libxslt源代码   Nokogiri,并在gem-install-time编译。该文件应该有效   对于所有版本1.6.4及更高版本。

     

(如果你需要支持安装早期版本的Nokogiri,你   可能想看看这份文件的git历史。)

确实,很难安装,但有一种方法。我开始深入阅读自述文件的历史,并通过精心编写的提交消息决定了这个:

  

Homebrew, I straight hate you.

从这条消息和其他答案中,我发现我需要在安装Nokogiri时非常具体地了解libxml2的lib,dir和include目录。以下内容适用于我,但请更新以匹配您的libxml2软件版本(我的2.9.2我正在安装Nokogiri 1.5.0):

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -v '1.5.0' -- 
    --use-system-libraries 
    --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.2/lib 
    --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" 
    --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config" 
    --with-xml2-dir=/usr/local/Cellar/libxml2/2.9.2/ 
    --with-xml2-include=/usr/local/Cellar/libxml2/2.9.2/include/libxml2

答案 16 :(得分:0)

在山狮遇到类似的安装问题,除了make命令在/ usr / local / opt / apple-gcc42 / bin中寻找gcc-4.2

这解决了我的问题;无需brew安装libxml2或libxslt或添加--with选项:

mkdir -p /usr/local/opt/apple-gcc42/bin
ln -s /usr/bin/gcc /usr/local/opt/apple-gcc42/bin/gcc-4.2