have_header 来自 mkmf 在 Jruby 中抛出错误

have_header from mkmf throws an error in Jruby

我有这个测试代码:

require 'mkmf'

puts have_header("iostream.h")

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

checking for iostream.h... RuntimeError: The compiler failed to generate an executable file. You have to install development tools first.

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
block in have_header at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:1091
block in checking_for at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:942 block in postpone at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:350 open at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:320 block in postpone at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:350 open at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:320 postpone at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:346 checking_for at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:941 have_header at /home/abd/.rvm/rubies/jruby-9.1.6.0/lib/ruby/stdlib/mkmf.rb:1090 at 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。

JRuby C 扩展已被弃用[并且可能已经被删除,但我有点不知所措]。

由于您 运行 在 JVM 上,您是否考虑过替代方案?即,如果性能足以满足您的需求,则使用 Java 的 BigIntegerBigDecimal,或者使用 JNI / JNA 包装 GMP - 它看起来像 somebody has tried already. Check out this SO 问题还有一些 Java 个选择。