我有这个测试代码:
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。
答案 0 :(得分:0)
JRuby C扩展已被弃用[并且可能已被删除但我有点不在循环中]。
由于您在JVM上运行,您是否考虑过其他选择?即,如果性能足以满足您的需要,可以使用Java BigInteger
或BigDecimal
,或者使用JNI / JNA包装GMP-它看起来像somebody has tried。查看this SO问题,了解更多Java备选方案。