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)
这是我尝试过的方法:
- 我使用的是捆绑的(带有 ruby-processing)jruby-complete,但是当这不起作用时,我安装了常规的 jruby 包。
- 我已经添加了 this page 上的答案中的行以解决 Java::JavaLang::RuntimeException 以达到此目的。
- 我发现 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 员工来说,这里列出了似乎需要的元素:
- 执行
brew search gst
并安装任何附加了 010 的东西。 Gstreamer-java 尚未更新为与 gstreamer-0.10 之后的任何版本兼容。
- 我已将 JDK 更新为版本 7 update 72(也许 8 可以,但我还没有尝试过)。此时,我从 .rp5rc 文件中删除了
"java_args": "-d32"
行,因为不支持 32 位模式。
- ruby-处理脚本
似乎不理解相对路径 查找相对于您运行 rp5 命令所在的目录(而不是相对于草图本身)在使用 Movie.new
加载文件时,所以我将其更改为绝对路径和 Eureka !
--
编辑
为清楚起见,编辑了上面的第 3 步:如果我在 运行 宁 rp5 run loop.rb
之前 cd
进入 ~/rp_samples/samples/processing_app/library/movie/ ,这将有助于故障排除过程。
我正在尝试 运行 一个带有 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)
这是我尝试过的方法:
- 我使用的是捆绑的(带有 ruby-processing)jruby-complete,但是当这不起作用时,我安装了常规的 jruby 包。
- 我已经添加了 this page 上的答案中的行以解决 Java::JavaLang::RuntimeException 以达到此目的。
- 我发现 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 员工来说,这里列出了似乎需要的元素:
- 执行
brew search gst
并安装任何附加了 010 的东西。 Gstreamer-java 尚未更新为与 gstreamer-0.10 之后的任何版本兼容。 - 我已将 JDK 更新为版本 7 update 72(也许 8 可以,但我还没有尝试过)。此时,我从 .rp5rc 文件中删除了
"java_args": "-d32"
行,因为不支持 32 位模式。 - ruby-处理脚本
似乎不理解相对路径查找相对于您运行 rp5 命令所在的目录(而不是相对于草图本身)在使用Movie.new
加载文件时,所以我将其更改为绝对路径和 Eureka !
--
编辑
为清楚起见,编辑了上面的第 3 步:如果我在 运行 宁 rp5 run loop.rb
之前 cd
进入 ~/rp_samples/samples/processing_app/library/movie/ ,这将有助于故障排除过程。