2016-10-29 8 views
0

У меня есть ruby2.2, ubuntu 14.04.4 LTS, и я хочу установить rsruby gem. Все настроено, и все мои другие драгоценные камни настроены с помощью «sudo bundle install». Но rsruby продолжает сбой, когда я пытаюсь установить его таким образом. Как его отладить и заставить работать?Bundle Install Rsruby Fails, но Gem Install Succeeds

У меня есть сценарий, я бегу, который работает эта команда

sudo bundle config build.rsruby "--with-R-include=/usr/share/R/include --with_cflags=\"-fPIC -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wall -fno-strict-aliasing\"" 

Тогда я бегу «Суда расслоение установить» и он падает на RSRuby:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension. 

/usr/bin/ruby2.2 -r ./siteconf20161028-31919-l2ks0n.rb extconf.rb 
--with-R-include=/usr/share/R/include --with_cflags=\"-fPIC -g -O2 
-fstack-protector --param=ssp-buffer-size=4 -Wformat -Wall 
-fno-strict-aliasing\" 
checking for main() in -lR... *** 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. 


from /usr/lib/ruby/2.2.0/mkmf.rb:541:in `try_link0' 
from /usr/lib/ruby/2.2.0/mkmf.rb:556:in `try_link' 
from /usr/lib/ruby/2.2.0/mkmf.rb:735:in `try_func' 
from /usr/lib/ruby/2.2.0/mkmf.rb:992:in `block in find_library' 
from /usr/lib/ruby/2.2.0/mkmf.rb:911:in `block in checking_for' 
from /usr/lib/ruby/2.2.0/mkmf.rb:351:in `block (2 levels) in postpone' 
from /usr/lib/ruby/2.2.0/mkmf.rb:321:in `open' 
from /usr/lib/ruby/2.2.0/mkmf.rb:351:in `block in postpone' 
from /usr/lib/ruby/2.2.0/mkmf.rb:321:in `open' 
from /usr/lib/ruby/2.2.0/mkmf.rb:347:in `postpone' 
from /usr/lib/ruby/2.2.0/mkmf.rb:910:in `checking_for' 
from /usr/lib/ruby/2.2.0/mkmf.rb:988:in `find_library' 
from extconf.rb:15:in `<main>' 

extconf failed, exit code 1 

Gem files will remain installed in 
/var/lib/gems/2.2.0/bundler/gems/rsruby-e72a8dc61617 for inspection. 
Results logged to 
/var/lib/gems/2.2.0/bundler/gems/extensions/x86_64-linux/2.2.0/rsruby-e72a8dc61617/gem_make.out 

An error occurred while installing rsruby (0.5.5), and Bundler cannot 
continue. 

Но если я бегу

sudo gem install rsruby -- --with-R-dir=/usr/lib/R --with-R-include=/usr/share/R/include --with_cflags="-fPIC -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wall -fno-strict-aliasing" 

После этого он успешно устанавливает

Fetching: rsruby-0.5.1.1.gem (100%) 
Building native extensions with: '--with-R-dir=/usr/lib/R --with-R-include=/usr/share/R/include --with_cflags=-fPIC -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wall -fno-strict-aliasing' 
This could take a while... 
Successfully installed rsruby-0.5.1.1 
Parsing documentation for rsruby-0.5.1.1 
Installing ri documentation for rsruby-0.5.1.1 
Done installing documentation for rsruby after 0 seconds 
1 gem installed 

ТАК, мой вопрос в том, как мне отладить это? И как мне заставить его работать с установкой пакета? Благодаря!

UPDATE, как указано в комментариях к мату, версия rsruby gem, установленная двумя командами, отличается. если я изменю свой Gemfile, чтобы указать комплект для установки версии «0.5.1.1», тогда «sudo bundle install» устанавливается успешно. однако мне нужна версия «0.5.5». мой Gemfile в настоящее время настроен следующим образом: «gem» rsruby, github: «custora/rsruby» и должен получить версию 0.5.5. так зачем 0.5.1.1 устанавливать правильно, но не 0.5.5?

UPDATE, mkmf.log

gcc -o conftest -I/usr/include/x86_64-linux-gnu/ruby-2.1.0 -I/usr/include/ruby-2.1.0/ruby/backward -I/usr/include/ruby-2.1.0 -I. -I/usr/share/R/include -D_FORTIFY_SOURCE=2 "-g conftest.c -L. -L/usr/lib/x86_64-linux-gnu -L. -Wl,-Bsymbolic-functions -Wl,-z,relro -L/build/ruby2.1-3vrZnx/ruby2.1-2.1.9/debian/lib -fstack-protector -rdynamic -Wl,-export-dynamic  -lruby-2.1 -lpthread -lgmp -ldl -lcrypt -lm -lc" 
sh: 1: Syntax error: Unterminated quoted string 
checked program was: 
/* begin */ 
1: #include "ruby.h" 
2: 
3: int main(int argc, char **argv) 
4: { 
5: return 0; 
6: } 
/* end */ 
+0

Это те, которые используют две разные версии рубина? –

+0

Да, матовый, я тоже заметил это. поэтому, чтобы добавить больше информации о том, что происходит, если я изменю свой Gemfile, чтобы указать комплект для установки версии «0.5.1.1», то он «sudo bundle Install» устанавливается успешно. однако мне нужна версия «0.5.5». мой Gemfile в настоящее время настроен следующим образом: «gem» rsruby, github: «custora/rsruby» и должен получить версию 0.5.5. так зачем 0.5.1.1 устанавливать правильно, но не 0.5.5? – appleLover

+0

спасибо, что указали это матовым, сообщение обновлено с новой информацией, я все еще застрял на нем и не могу получить версию, которую мне нужно установить – appleLover

ответ

0

Хорошо, так что было несколько разных вещей происходит здесь. Я буду документировать их все здесь, если кто-то, кто должен использовать rsruby, сталкивается с этим. Во-первых, как отметил Мэтт, установка пакета и установка gem пытались установить две разные версии rsruby. Во-вторых, мне пришлось изменить этот скрипт, который я использовал для настройки параметров конфигурации пакета, этот скрипт НЕ работал. Для того, чтобы сделать эту работу, я заменил \" с '

#!/bin/bash 

# Does /usr/bin/gem link to /usr/bin/gem2.1 ? 
# gem install bundler -v 1.6.0.rc2 
sudo bundle config build.rsruby "--with-R-include=/usr/share/R/include --with-cflags=\"-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -fPIC\"" 

Приведенные выше два шага, сделанные rsruby установки. Но после этого я все равно получал ошибки segfault. Проблема, похоже, была либо старым дистрибутивом ubuntu, либо тем фактом, что, поскольку это был старый дистрибутив ubuntu, мне пришлось использовать clearbox repo, чтобы получить более новую версию ruby. В любом случае, после обновления до текущего дистрибутива linux, который имел текущую версию ruby, он работал.