【问题标题】:warbler seems to use a different ffi that doesn't understand size_t莺似乎使用不同的 ffi 不理解 size_t
【发布时间】:2013-01-05 22:38:19
【问题描述】:

当通过 jRuby 运行 rails 时,FFI 理解 :size_t,但在使用 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
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 中具有 ffi 作为依赖项,并且在主入口点中具有 requires 'ffi'

【问题讨论】:

    标签: jruby jrubyonrails ffi warbler


    【解决方案1】:

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

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

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

    【讨论】:

    • 任何修复?与 jruby176 一起出现
    • 确保您的 webapps 目录的路径不包含空格,这应该可以解决此问题。不幸的是,jruby 1.7.6 还有很多其他未解决的问题。降级到 1.7.4 “修复”了它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2017-03-22
    • 2017-03-27
    • 2016-09-26
    • 2013-10-23
    • 2019-11-01
    相关资源
    最近更新 更多