如何解决这个JNA问题?

时间:2010-12-20 18:23:47

标签: java windows

我有使用JNA的应用程序并获取音频和视频。它适用于我的Linux机器。但是当我在Windows中测试它时。它永远不会工作。因为我还在学习,我会很感激你的建议如何解决它,我已经花了几天几周时间才解决它,但是我不知道为什么JAVA不能简单地工作,它是一个跨平台。为什么要再次需要系统路径或等配置。

我现在完全迷失了,为什么它在Linux中有效并且在Windows XP中不起作用?我怎么能运行呢?

Inside the lib direcotry i have my JNA and Audio libraries.
C:\Documents and Settings\test\Desktop\test>dir
 Volume in drive C has no label.
 Volume Serial Number is 680F-0963

 Directory of C:\Documents and Settings\test\Desktop\test

19/12/2010  22:09    <DIR>          .
19/12/2010  22:09    <DIR>          ..
19/12/2010  22:09            51.791 Audio.jar
19/12/2010  22:09    <DIR>          lib
               1 File(s)         51.791 bytes
               3 Dir(s)     487.002.112 bytes free



Now trying to run Audio.jar, gets Fail 1:

C:\Documents and Settings\test\Desktop\test>java -Djava.library.path=~/jni -jar
Audio.jar
Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load librar
y gstreamer-0.10
        at org.gstreamer.lowlevel.GNative.loadWin32Library(GNative.java:83)
        at org.gstreamer.lowlevel.GNative.loadLibrary(GNative.java:43)
        at org.gstreamer.lowlevel.GstNative.load(GstNative.java:42)
        at org.gstreamer.lowlevel.GstNative.load(GstNative.java:39)
        at org.gstreamer.Gst.<clinit>(Gst.java:59)
        at video.MyVideo.simpletest(MyVideo.java:31)
        at sipphone.MainApplet.run(MainApplet.java:58)
        at sipphone.MainApplet.main(MainApplet.java:43)


Fail 2:
C:\Documents and Settings\test\Desktop\test>java -Djna.library.path=. -jar Audio
.jar
Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load librar
y gstreamer-0.10
        at org.gstreamer.lowlevel.GNative.loadWin32Library(GNative.java:83)
        at org.gstreamer.lowlevel.GNative.loadLibrary(GNative.java:43)
        at org.gstreamer.lowlevel.GstNative.load(GstNative.java:42)
        at org.gstreamer.lowlevel.GstNative.load(GstNative.java:39)
        at org.gstreamer.Gst.<clinit>(Gst.java:59)
        at video.MyVideo.simpletest(MyVideo.java:31)
        at sipphone.MainApplet.run(MainApplet.java:58)
        at sipphone.MainApplet.main(MainApplet.java:43)

3 个答案:

答案 0 :(得分:2)

您需要安装DLL,或至少在其他人指出的JNA库路径中。

它确实在Windows上添加了额外的依赖。这将是对Linux的额外依赖,但gstreamer是由您的发行版预安装的。当我在使用Java的USB端口时,我遇到了同样的问题。

我知道避免DLL的唯一解决方案是拥有可以在Windows上调用的第二个版本的代码,它只能使用Win32的东西(即Windows附带的东西),但这将是一个非常大的事业

答案 1 :(得分:1)

尝试从cling包运行mediarenderer,我在windows xp上遇到了同样的错误。 我从https://code.google.com/archive/p/ossbuild/downloads

中找到的libgstreamer-0.10.so包中找到了正确的GStreamer-WinBuilds-GPL-x86-Beta04-0.10.7.msi

一旦安装(环境变量PATH(对于依赖项)和OSSBUILD_GSTREAMER_DIR设置), 在提示符中,我终于能够使用以下语法运行mediarenderer来介绍lib的路径:

Z:\Downloads\cling-distribution-2.1.0\cling-distribution-2.1.0\mediarenderer\target>java -Djna.library.path="C:\Program Files\OSSBuild\GStreamer\v0.10.7\bin" -jar cling-mediarenderer-2.1.0-standalone.jar

希望这有助于作为一个起点!

答案 2 :(得分:-2)

对于失败1:我不相信~/语法可以在Windows上运行。请尝试使用%HOME%\tilde expansion发生在Bash中,因此Windows中的情况有所不同。

对于失败2:看起来.dll不在您的测试目录中,并且您将jna.library.path设置为.

如果.dll位于lib目录中,那么路径不应设置为该目录,而不是~/jni.吗?