jruby – warbler似乎使用了一个不理解size_t的不同ffi

FFI理解:size_t在通过j Ruby运行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文件.

这是在Windows上运行java -jar的回溯的顶部. (我在backtrace中编辑了文件路径的开头).

--- 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有2个FFI可供使用.

> normal FFI gem.
> jruby-stdlib ffi.

2之间的巨大差异似乎只有前者理解:size_t.

我的问题是:有两种不同的FFI吗?
如果是这样:我如何确保我的宝石加载正确的ffi?
如果不是:我做错了什么?

PS:我是sqlanywhere-ffi gem的作者,所以如果问题是我依赖于错误的东西,我可以改变它.目前它在gemspec,gemfile中有ffi作为依赖性,它在主入口点需要’ffi’.

解决方法

(I’ve edited the beginnings of the file paths in the backtrace).

我猜你的Tomcat目录的完整路径包含空格,确保它没有.

jruby-1.6版本没有出现此问题.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...