来自mkmf的have_header在Jruby中抛出一个错误

时间:2016-12-22 09:59:13

标签: jruby ruby-c-extension

我有这个测试代码:

require 'mkmf'

puts have_header("iostream.h")

此代码在Jruby中抛出错误,如下所示:

  

检查iostream.h ... RuntimeError:编译器无法生成可执行文件。您必须先安装开发工具。

     

try_do at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:456    try_cpp at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:587
  阻止在Have_header中   /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:1091
  在check_for中阻止   /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:942         阻止在/home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:350                      在/home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:320打开         阻止在/home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:350                      在/home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:320打开                  推迟到/home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:346              在/home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:941中check_for               has_header at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:1090                     在test.rb:3

我不知道开发工具是什么意思,我在没有找到任何相关信息的情况下搜索了互联网。

我通过rvm安装了Jruby 9.1.6.0,这是我的java版本:

[abd@abd testruby]$ java -version
openjdk version "1.8.0_112"
OpenJDK Runtime Environment (build 1.8.0_112-b15)
OpenJDK 64-Bit Server VM (build 25.112-b15, mixed mode)

我在这里使用Arch linux。

我的问题背后的真正原因是我尝试安装gmp gem并且由于相同的错误而无法构建原生扩展,我知道gem没有维护,但我想解决这个问题,因为上面的消息表明我的装置缺乏。

顺便说一句,我有jdk,而不仅仅是jre。

1 个答案:

答案 0 :(得分:0)

JRuby C扩展已被弃用[并且可能已被删除但我有点不在循环中]。

由于您在JVM上运行,您是否考虑过其他选择?即,如果性能足以满足您的需要,可以使用Java BigIntegerBigDecimal,或者使用JNI / JNA包装GMP-它看起来像somebody has tried。查看this SO问题,了解更多Java备选方案。