在Solaris上,libiconv可能会出现nokogiri.so LoadError问题

问题描述

|| 我正在尝试在没有root特权的Solaris机器上运行Ruby gem“ Nokogiri \”。到目前为止,我已经完成了什么: 我已经在自己的主目录中构建了自己的ruby版本(1.9.2p180) 尝试使用\“ gem install nokogiri \”安装nokogiri 然后,gem安装抛出此错误
Building native extensions.  This Could take a while...
ERROR:  Error installing nokogiri:
    ERROR: Failed to build gem native extension.

/home/bender/ruby/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.
所以我在/ home / myuser / work / libiconv中下载并构建了libiconv
$ ls /home/myuser/work/libiconv/
bin      build    include  lib      share
并将位置作为nokogiri的参数传递:
gem install nokogiri -- --with-iconv-dir=/home/myuser/work/libiconv --with-iconv-include=/home/myuser/work/libiconv/include --with-iconv-lib=/home/myuser/work/libiconv/lib 
现在,宝石开始生成,并且不会显示任何错误。问题是,当我现在尝试使用它时,例如在irb中,它无法加载:
require \'nokogiri\'
LoadError: ld.so.1: ruby: fatal: libiconv.so.2: open Failed: No such file or directory - /home/myuser/ruby/lib/ruby/gems/1.9.1/gems/nokogiri-1.4.4/lib/nokogiri/nokogiri.so
    from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require\'
    from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require\'
    from /home/myuser/ruby/lib/ruby/gems/1.9.1/gems/nokogiri-1.4.4/lib/nokogiri.rb:13:in `<top (required)>\'
    from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:57:in `require\'
    from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:57:in `rescue in require\'
    from /home/myuser/ruby/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require\'
    from (irb):1
    from /home/myuser/ruby/bin/irb:12:in `<main>\'
但是,当我寻找应该丢失的文件时,该文件在那里并且也可读/可执行:
ll /home/myuser/ruby/lib/ruby/gems/1.9.1/gems/nokogiri-1.4.4/lib/nokogiri/
total 66
...
-rwxr-xr-x   1 myuser   group      370552 Jun  6 22:53 nokogiri.so
...
好的,那是我被卡住的地方。文件在那里但无法打开?我试图重建没有效果的libiconv。 Nokogiri不会抛出任何错误,表明构建过程会失败。因此,我不知道该如何解决,Google也无法给我答案。我希望这里有人可以给我一些提示。 /编辑 我在谷歌上搜索了更多内容,发现这篇文章中有人使用ldd来显示依赖关系。当我对nokogiri做同样的事情时,它会说:
ldd /home/myuser/ruby/bin/nokogiri
ldd: /home/myuser/ruby/bin/nokogiri: unsupported or unkNown file type
我猜这是因为它是一个红宝石文件,但是如果它是相关的,我想提一下。     

解决方法

        如果您使用的是GNU binutils,请尝试设置
LDFLAGS=\"-Wl,-rpath /home/myuser/work/libiconv/lib\"
如果它是Solaris链接程序,则它类似于-X,我真的不记得了。只需检查ld的手册页以获取运行路径设置。它将允许运行时链接程序找到.so。     ,        如果您要构建自己的沙箱,为什么不使用RVM来完成所有繁重的工作呢?其最终目的是在ѭ7中创建一个用户沙箱,构建和管理您要运行的Ruby版本以及与您的项目相关联的gemset。 如果您决定采用该路径(我强烈建议您这样做),请确保遵循链接页面上的单用户安装说明,如果不使用* profile文件,则将适当的字符串添加到
~/.bash_profile
~/.bashrc
中,并在运行
rvm notes
时遵循建议的RVM输出。 我已经在我进行开发的几个Centos,Ubuntu和Mac OS机器上安装了它,并且认为它很棒。