我正在使用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中看到的
但是,通过安装合适的libmediainfo0和libzen0“.deb fromhttp://mediainfo.sourceforge.net/en/Download/Ubuntu
不过,我的解决方案需要是可移植的,这意味着,我希望所有必要的资源都包含在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
(envariable)或jna.library.path
(system property)上提供库。