【发布时间】:2013-04-05 05:06:57
【问题描述】:
我正在使用 mediainfo (http://mediainfo.sourceforge.net/en) 使用 Java 代码从音频和视频文件中提取信息。
我的 java 项目在所有平台(osx、win 和 linux)上运行。到目前为止,我只在过程简单的 osx 上测试了 mediainfo:只需将 libmediainfo.dylib 放在目标文件夹中并使用本机库访问它,你就可以开始了。而且该解决方案完美无缺...
我现在希望将此功能扩展到其他操作系统,从 Linux 开始。然而,事实证明这比我想象的更具挑战性。 起初我一直得到这个:
"java.lang.UnsatisfiedLinkError: Unable to load library 'mediainfo': libmediainfo.so: cannot open shared object file: No such file or directory"
这是意料之中的,因为它正在 /usr/lib 中查找
但是通过从http://mediainfo.sourceforge.net/en/Download/Ubuntu安装合适的 libmediainfo0 & libzen0 ".deb 解决了这个问题
不过,我的解决方案需要是可移植的,也就是说,我希望所有必要的资源都包含在 java 项目包中,而无需任何进一步的安装。 我还需要知道是否可以更改 mediainfo 以在我的 java 包中查找资源而不是系统位置。
供您参考,我正在使用 Java Native Access (jna) 与库进行交互。还使用网站建议的 MediaInfo.java 和 MediaInfoLibrary.java 类。 如果您需要其他详细信息,请告诉我。
任何智慧都会受到高度赞赏 谢谢!!
【问题讨论】:
-
最新版本的 JNA (3.5.2) 将自动解压原生库 bundled as resources(无论是基于文件还是基于 jar)。
-
谢谢。你能详细说明一下吗?
-
如果您将 linux/amd64 的共享库作为 /linux-x86-64/libmylibrary.so 包含在您的一个 jar 文件中,JNA 将在您调用
Native.loadLibrary("my library")时自动提取并加载它.旧版本的 JNA 要求您在LD_LIBRARY_PATH(变量)或jna.library.path(系统属性)上提供该库。 -
就是这样!它终于奏效了(@至少现在在 linux 上)我在“linux-i386”dir sweeeeet 下的 jar 文件中添加了资源!您能否将您的评论添加为答案,以便我可以接受 thx 一百万
标签: java linux macos jna mediainfo