Я использую mediainfo (http://mediainfo.sourceforge.net/en) для извлечения информации из аудио и видеофайлов с использованием Java-кода.Настройка libmediainfo для работы с Java-проектом без установки на всех платформах (ОС)
Мой проект java работает на всех платформах (osx, win & linux). До сих пор я только тестировал mediainfo по osx, где процедура проста: просто поместите 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 из http://mediainfo.sourceforge.net/en/Download/Ubuntu
Тем не менее, мое решение должно быть портативным, то есть я хочу, чтобы все необходимые ресурсы были включены в пакет Java-пакета без каких-либо дополнительных установок. Мне также нужно знать, можно ли изменить mediainfo для поиска ресурса ces в моем java-пакете вместо системного расположения.
Для вашей справки я использую Java Native Access (jna) для взаимодействия с библиотекой. Также используйте классы MediaInfo.java & MediaInfoLibrary.java, которые предлагает веб-сайт. Сообщите мне, если вам нужны другие детали.
любая мудрость высоко ценится спасибо !!
Последняя версия JNA (3.5.2) автоматически распакует собственные библиотеки [в комплекте как ресурсы] (http://twall.github.io/jna/3.5.2/javadoc/com/sun/jna/NativeLibrary. html) (будь то файловая или jar-based). – technomage
Спасибо за это. Не могли бы вы подробнее рассказать об этом? – static0886
Если вы включили вашу общую библиотеку для linux/amd64 в качестве /linux-x86-64/libmylibrary.so в один из ваших файлов jar, JNA будет извлекать ее и загружать автоматически, когда вы вызываете 'Native.loadLibrary (« моя библиотека ») '. Старые версии JNA требуют, чтобы библиотека была доступна на 'LD_LIBRARY_PATH' (envariable) или' jna.library.path' (системное свойство). – technomage