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

时间:2015-01-11 18:15:23

标签: java ruby processing

我正在尝试运行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处理)jruby-complete,但是当这不起作用时,我安装了常规的jruby包。
  2. 我已经在this page的答案中添加了一行来解决Java :: JavaLang :: RuntimeException以实现这一目标。
  3. 我找到了this question的java,但是通过homebrew(在Mac上)安装gstreamer不起作用,从gstreamer安装通用pkg也没有让我更进一步。
  4. 我只想玩ruby-processing :(。如果我没有提供足够的细节,请告诉我,但有没有人有任何想法?谢谢!

    -

    修改

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

    我尝试了'sudo find / -iname "gstnative.java",我似乎无法找到此错误来自的GSTNative.java文件。也许它以某种方式用ruby处理打包?无论如何......我在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)。 E.g。

    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
    

    所以他们似乎在那里,但也许我不明白它究竟在寻找什么。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

现在正在运作:

我不是百分之百确定最终解决问题的方法,但是,对于未来的googlers,这里有一个似乎需要的元素列表:

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

    修改

    为了清晰起见,编辑了上面的第3步:如果我在运行cd之前{~1}}编辑了〜/ rp_samples / samples / processing_app / library / movie /,那么它将有助于故障排除过程。