0

ウィンドウではすべてうまくいきましたが、Linux では失敗しました。私がやりたいことは、Ruby スクリプトを -Xcompile.invokedynamic=true パラメーターを使用して Java バイトコードにコンパイルすることです。

        [sxu3@** ruby​​script]$ jrubyc -Xcompile.invokedynamic=true hello.rb
        OptionParser::InvalidOption: 無効なオプション: -Xcompile.invokedynamic=true
             /homes/sxu3/tools/jruby-1.7.10/lib/ruby/1.9/optparse.rb:1542 で完了
               org/jruby/RubyKernel.java:1282 でキャッチ
            /homes/sxu3/tools/jruby-1.7.10/lib/ruby/1.9/optparse.rb:1540 で完了
         /homes/sxu3/tools/jruby-1.7.10/lib/ruby/1.9/optparse.rb:1380 の parse_in_order
               org/jruby/RubyKernel.java:1282 でキャッチ
          /homes/sxu3/tools/jruby-1.7.10/lib/ruby/1.9/optparse.rb:1347 の parse_in_order
              注文!/homes/sxu3/tools/jruby-1.7.10/lib/ruby/1.9/optparse.rb:1341 で
            入れ替わる!/homes/sxu3/tools/jruby-1.7.10/lib/ruby/1.9/optparse.rb:1432 で
              解析!/homes/sxu3/tools/jruby-1.7.10/lib/ruby/1.9/optparse.rb:1453 で
        /homes/sxu3/tools/jruby-1.7.10/lib/ruby/shared/jruby/compiler.rb:83 の compile_argv
          /homes/sxu3/tools/jruby-1.7.10/lib/ruby/1.9/optparse.rb:882 で初期化します
        /homes/sxu3/tools/jruby-1.7.10/lib/ruby/shared/jruby/compiler.rb:35 の compile_argv
              (ルート) /homes/sxu3/tools/jruby-1.7.10/bin/jrubyc:5
    [sxu3@** ruby​​script]$ jrubyc -Xcompile.invokedynamic=true hello.rb ^C
    [sxu3@** ruby​​script]$ which jrubyc
    ~/tools/jruby-1.7.10/bin/jrubyc
    [sxu3@** ruby​​script]$ jruby -v
    jruby 1.7.10 (1.9.3p392) 2014-01-09 Java HotSpot(TM) Server VM 1.7.0_51-b13 上の c4ecd6b [linux-i386]
    [sxu3@** ruby​​script]$


    [sxu3@** ruby​​script]$ uname -a
    Linux .. 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

-Xcompile.invokedynamic=true を指定しないと、jrubyc は機能しますが、生成されたバイトコードに invokedynamic 命令はありません。また、

      "jrubyc -Xcompile.invokedynamic=true hello.rb" 

ウィンドウで動作し、ウィンドウのクラスファイルでinvokedynamicを見ました。

他のすべての jrubyc プロパティ (.jrubyrc) をデフォルト値のままにします

hello.rb は 1 行の Ruby スクリプトです。

   puts "hello world"

jrubyc 1.7.6 と同じエラーも試しました。誰でも手がかりを提供できますか?

[アップデート]:

最後に、例外は jrubyc が -Xcompile.invokedynamic=true オプションをサポートしていないことを示していると思います。jruby wiki ページには、"jrubyc" の代わりに jruby と書かれており、オプションで動作します。

4

1 に答える 1

1

jruby と invokedynamic にも問題がありました。問題は、invokedynamic が JVM 1.7 で実際にサポートされていないことです。動作させるには、JVM 1.8 をインストールする必要があります。ここで問題について読むことができます 。その JVM で実行します。

ただし、HotSpot OpenJDK バージョンとは少し異なる Oracle JVM がインストールされているため、invokedynamic を使用した jruby が Windows で動作する可能性があります。

于 2014-01-21T10:24:48.017 に答える