【发布时间】:2017-03-11 23:11:31
【问题描述】:
我有 ruby2.2,ubuntu 14.04.4 LTS,我想安装 rsruby gem。一切都设置好了,我所有的其他 gem 都设置好了,使用“sudo bundle install”。但是当我尝试这样安装时,rsruby 不断崩溃。如何调试它并使其工作?
我有一个运行此命令的脚本
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\""
然后我运行“sudo bundle install”,它在 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
所以,我的问题是,我该如何调试?以及如何让它与捆绑安装一起使用?谢谢!
更新,正如 matt 在 cmets 中指出的那样,两个命令安装的 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 却不能呢?
更新,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 */
【问题讨论】:
-
那些使用两个不同版本的 ruby 吗?
-
是的,马特,我也注意到了。所以要为正在发生的事情添加更多信息,如果我更改我的 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 却不能呢?
-
感谢 matt 指出这一点,帖子已用新信息更新,我仍然卡在上面,无法获得我需要安装的版本
-
您从哪里获得 rsruby 0.5.5 的源代码?在 github 上,我看到最终版本是 0.5.1.1,大约在五年前发布。
-
这是一个我正在与其他人合作的联合项目。负责人将 gemfile 设置为“gem 'rsruby', github: 'custora/rsruby'”,据我所知,这些是告诉运行该项目的服务器从哪里获取 rsruby 的唯一命令,并且当我在服务器上执行捆绑列表时,rsruby 的版本是“rsruby (0.5.5 e72a8dc)”。这是否回答你的问题?弄清楚这个问题对我来说有点新鲜。
标签: ruby ubuntu rubygems bundler