nokogiri.so LoadError может быть проблема с libiconv на Solaris - PullRequest
0 голосов
/ 07 июня 2011

Я пытаюсь запустить Ruby Gem "Nokogiri" на машине Solaris, где у меня нет привилегий root.Что я сделал до сих пор:

  • Я собрал свою собственную версию ruby ​​(1.9.2p180) в своем домашнем каталоге
  • попытался установить nokogiri с помощью "gem install 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.

Поэтому я скачал и собрал libiconv в / home / myuser / work / 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 также не может дать мне ответы.Я надеюсь, что кто-то здесь может дать мне несколько подсказок.

/ edit

Я погуглил еще немного и нашел этот пост , где кто-то использует ldd для показа зависимостей.Когда я делаю то же самое для nokogiri, он говорит:

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

Я полагаю, это потому, что это рубиновый файл, но в случае его актуальности я хочу упомянуть об этом.

Ответы [ 2 ]

0 голосов
/ 07 июня 2011

Если вы собираетесь построить свою собственную песочницу, почему бы не использовать RVM для выполнения всех тяжелых работ?Его цель в жизни - создать пользовательскую изолированную программную среду в ~/.rvm, собрать и управлять версиями Ruby, которые вы хотите запустить, и наборами гемс, связанных с вашими проектами.

Если вы решите пойти по этому пути, который я рекомендуюобязательно следуйте инструкциям однопользовательской установки на связанной странице, чтобы добавить соответствующую строку в ~/.bash_profile или ~/.bashrc, если вы не используете файл профиля *, и следовать рекомендациям, которые выводит RVM привы запускаете rvm notes.

У меня он установлен на нескольких блоках Centos, Ubuntu и Mac OS, где я занимаюсь разработкой, и думаю, что это здорово.

0 голосов
/ 07 июня 2011

Если вы используете GNU binutils, попробуйте установить

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

, если это компоновщик Solaris, тогда это что-то вроде -X, я не помню.Просто проверьте man-страницу ld для настройки пути запуска.Это позволит компоновщику во время выполнения найти .so.

...