4

FFI は:size_t、jRuby を介して rails を実行すると理解しますが、Warbler を使用して .war ファイルを作成し、java -jar my_project.warまたは Tomcat を使用してそれを実行した後では理解できません。

                       Linux | Windows
-----------------------------+-------------
java -jar              works | doesn't work
tomcat                 works | doesn't work
rails s (using jruby)  works | works

Linux と Windows は、比較で同じ war ファイルを使用します。

java -jarこれは、 Windowsでの実行からのバックトレースの上部です。(バックトレースのファイル パスの先頭を編集しました)。

--- Backtrace
TypeError: unable to resolve type 'size_t'
  find_type at jar:file:/my_project.war/WEB-INF/lib/jruby-stdlib-1.7.2.jar!/META-INF/jruby.home/lib/ruby/shared/ffi/types.rb:55
  type_size at jar:file:/my_project.war/WEB-INF/lib/jruby-stdlib-1.7.2.jar!/META-INF/jruby.home/lib/ruby/shared/ffi/types.rb:147
SQLAnywhere at my_project.war/WEB-INF/gems/gems/sqlanywhere-ffi-1.0.1/lib/sqlanywhere.rb:13
     (root) at my_project.war/WEB-INF/gems/gems/sqlanywhere-ffi-1.0.1/lib/sqlanywhere.rb:5
    require at org/jruby/RubyKernel.java:1027

バックトレースでファイルを見ると、さまざまな c タイプがリストされていますが、size_t.

jRuby で利用できる FFI は 2 つあるようです。

両者の大きな違いは、前者しか分からないことらしい:size_t

私の質問は: 2 つの異なる FFI がありますか? もしそうなら: 自分の gem が正しい ffi をロードするようにするにはどうすればよいですか? そうでない場合:何が間違っていますか?

PS: 私は sqlanywhere-ffi gem の作成者です。問題が間違ったものに依存している場合は、変更できます。現在、gemspec、gemfile、およびrequires 'ffi'メイン エントリ ポイントの依存関係として ffi があります。

4

1 に答える 1