1

我正在使用 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 类。如果您需要其他详细信息,请告诉我。

任何智慧都非常感谢谢谢!

4

1 回答 1

2

最新版本的 JNA (3.5.2) 将自动解压缩捆绑为资源的本机库(无论是基于文件还是基于 jar)。

如果您将 linux/amd64 的共享库包含/linux-x86-64/libmylibrary.so在您的一个 jar 文件中,JNA 将提取它并在您调用时自动加载它Native.loadLibrary("my library")。旧版本的 JNA 要求您使库在LD_LIBRARY_PATH(envariable) 或jna.library.path(system property) 上可用。

于 2013-04-19T14:41:12.070 回答