Ruby-使用 gstreamer 库导致 UnsatisfiedLinkError 的处理示例

Ruby-processing example causing UnsatisfiedLinkError with gstreamer library

我正在尝试 运行 一个带有 ruby 处理的示例文件,但它每次都崩溃并出现此错误:

me$ rp5 run ~/rp_samples/samples/processing_app/library/movie/loop.rb 
/Users/jimmy/rp_samples/samples/processing_app/library/movie/loop.rb:14 warning: ambiguous Java methods found, using background(int)
Java::JavaLang::UnsatisfiedLinkError
Could not load library: gstreamer
    org.gstreamer.lowlevel.GstNative.load(org/gstreamer/lowlevel/GstNative.java:53)
    org.gstreamer.lowlevel.GstNative.load(org/gstreamer/lowlevel/GstNative.java:43)
    org.gstreamer.Gst.<clinit>(org/gstreamer/Gst.java:101)
    java.lang.reflect.Constructor.newInstance(java/lang/reflect/Constructor.java:513)
    RUBY.setup(/rp_samples/samples/processing_app/library/movie/loop.rb:16)
    processing.core.PApplet.handleDraw(processing/core/PApplet.java:2361)
    processing.core.PGraphicsJava2D.requestDraw(processing/core/PGraphicsJava2D.java:240)
    processing.core.PApplet.run(processing/core/PApplet.java:2256)
    java.lang.Thread.run(java/lang/Thread.java:695)

这是我尝试过的方法:

  1. 我使用的是捆绑的(带有 ruby-processing)jruby-complete,但是当这不起作用时,我安装了常规的 jruby 包。
  2. 我已经添加了 this page 上的答案中的行以解决 Java::JavaLang::RuntimeException 以达到此目的。
  3. 我发现 this question for java, but installing gstreamer via homebrew (on a Mac) didn't work and installing the universal pkg from gstreamer 也没有让我更进一步。

我只想玩玩 ruby-processing :(。如果我没有提供足够的细节,请告诉我,但是有人有任何想法吗?谢谢!

--

编辑

我相信通过查看 gstreamer-java Google 组,新版本的 gstreamer (> 1.0) 不兼容。我在自制软件上找到了一组旧的 0.10 gstreamer 库并安装了它们。

我尝试了 'sudo find / -iname "gstnative.java",但我似乎无法找到导致此错误的 GSTNative.java 文件。也许它以某种方式与 ruby-processing 打包在一起?不管怎样.. 我在 gstreamer-java/src/org/gstreamer/lowlevel/Main.java:

中找到了这一行
System.setProperty("jna.library.path", "/usr/share/java:/opt/local/lib:/usr/local/lib:/usr/lib");

如果我检查以下评论 (la /usr/local/lib/ | grep "gst") 中提到的文件,我会看到所有这些文件,并且它们以两种方式命名(0.10.0.dylib 或 0.10.dylib ).例如

lrwxr-xr-x    1 jimms  admin      71 Jan 12 15:24 libgstinterfaces-0.10.0.dylib -> ../Cellar/gst-plugins-base010/0.10.36/lib/libgstinterfaces-0.10.0.dylib
lrwxr-xr-x    1 jimms  admin      65 Jan 12 15:24 libgstinterfaces-0.10.a -> ../Cellar/gst-plugins-base010/0.10.36/lib/libgstinterfaces-0.10.a
lrwxr-xr-x    1 jimms  admin      69 Jan 12 15:24 libgstinterfaces-0.10.dylib -> ../Cellar/gst-plugins-base010/0.10.36/lib/libgstinterfaces-0.10.dylib

所以他们似乎在那里,但也许我不明白它在寻找什么。感谢您的帮助!

现在可以使用了:

我不是 100% 确定是什么最终解决了这个问题,但是对于未来的 google 员工来说,这里列出了似乎需要的元素:

  1. 执行 brew search gst 并安装任何附加了 010 的东西。 Gstreamer-java 尚未更新为与 gstreamer-0.10 之后的任何版本兼容。
  2. 我已将 JDK 更新为版本 7 update 72(也许 8 可以,但我还没有尝试过)。此时,我从 .rp5rc 文件中删除了 "java_args": "-d32" 行,因为不支持 32 位模式。
  3. ruby-处理脚本似乎不​​理解相对路径 查找相对于您运行 rp5 命令所在的目录(而不是相对于草图本身)在使用 Movie.new 加载文件时,所以我将其更改为绝对路径和 Eureka !

--

编辑

为清楚起见,编辑了上面的第 3 步:如果我在 运行 宁 rp5 run loop.rb 之前 cd 进入 ~/rp_samples/samples/processing_app/library/movie/ ,这将有助于故障排除过程。