4

FFI:size_t在通过 jRuby 运行 rails 时可以理解,但在使用 Warbler 创建 .war 文件并使用java -jar my_project.warTomcat 运行该文件后则不理解。

                       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 有 2 个 FFI 可用。

两者最大的区别,似乎只有前者懂:size_t

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

PS:我是 sqlanywhere-ffi gem 的作者,所以如果问题是我依赖于错误的东西,我可以更改它。目前它在 gemspec、gemfile 和requires 'ffi'主入口点中具有 ffi 作为依赖项。

4

1 回答 1

3

(我在回溯中编辑了文件路径的开头)。

我猜您的 Tomcat 目录的完整路径包含空格,请确保它不包含空格。

jruby-1.6 版本没有出现这个问题。

于 2013-08-26T13:53:27.567 回答