0

ルート権限を持たないSolarisマシンでRubygem「Nokogiri」を実行しようとしています。私がこれまでにしたこと:

  • ホームディレクトリに独自のルビーバージョン(1.9.2p180)を作成しました
  • 「geminstallnokogiri」でnokogiriをインストールしようとしました

次に、geminstallは次のエラーをスローしました。

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 

これでgemがビルドされ、エラーは表示されません。問題は、私が今それを使おうとすると、例えば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は、ビルドプロセスが失敗したというエラーをスローしません。だから私はこれを解決する方法がわからず、グーグルも私に答えを与えることができませんでした。ここの誰かが私にいくつかのヒントを教えてくれることを願っています。

/編集

私はもう少しグーグルで調べて、誰かが依存関係を示すためにlddを使用しているこの投稿を見つけました。nokogiriについても同じことをすると、次のようになります。

ldd /home/myuser/ruby/bin/nokogiri
ldd: /home/myuser/ruby/bin/nokogiri: unsupported or unknown file type

これはルビーファイルだからだと思いますが、関係がある場合は言及したいと思います。

4

2 に答える 2

0

独自のサンドボックスを構築する場合は、RVMを使用してすべての面倒な作業を行ってみませんか? その本来の目的は、 でユーザー サンドボックスを作成し、~/.rvm実行したい Ruby バージョンとプロジェクトに関連付けられた gemset をビルドおよび管理することです。

私が強くお勧めするそのパスに行くことに決めた場合は、リンクされたページのシングルユーザーインストールの指示に従って~/.bash_profileください~/.bashrc。を実行したときに RVM が出力する推奨事項rvm notes

開発を行っているいくつかの Centos、Ubuntu、および Mac OS ボックスにインストールしており、素晴らしいと思います。

于 2011-06-06T23:11:41.947 に答える
0

GNU binutils を使用している場合は、設定してみてください

LDFLAGS="-Wl,-rpath /home/myuser/work/libiconv/lib"

Solaris リンカの場合は -X のようなものですが、よく覚えていません。実行パスの設定については、ld の man ページを確認してください。これにより、実行時リンカーが .so を見つけられるようになります。

于 2011-06-06T21:15:57.887 に答える