Экспорт исполняемого файла jar, который использует opencv

При экспорте в eclipse я выбираю «Пакет необходимых библиотек в сгенерированную банку». Файл jar работает только на моей машине. Однако, когда я тестирую его на другой машине, он дает это исключение:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681) at java.lang.Runtime.loadLibrary0(Runtime.java:840) at java.lang.System.loadLibrary(System.java:1047) at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593) at com.googlecode.javacpp.Loader.load(Loader.java:489) at com.googlecode.javacpp.Loader.load(Loader.java:431) at com.googlecode.javacv.cpp.opencv_core.(opencv_core.java:136) at mains.(mains.java:25) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:266) at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56) 

    Короткий ответ

    Вы должны установить OpenCV (как указано в требованиях JavaCV ) и JavaCV в системе, чтобы использовать JavaCV. Поскольку вы, вероятно, установили их для разработки на своем компьютере, приложение работает, но на другой машине, возможно, они не установлены, и, следовательно, jar does’nt работает.

    Длительный ответ

    Проблема заключается не в библиотеке JavaCV, которая, как представляется, правильно включена в вашу jar как показано линиями:

     at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593) at com.googlecode.javacpp.Loader.load(Loader.java:489) at com.googlecode.javacpp.Loader.load(Loader.java:431) at com.googlecode.javacv.cpp.opencv_core.(opencv_core.java:136) 

    Дело в том, что JavaCV построен поверх OpenCV. OpenCV – это библиотека C ++, единственный способ использовать ее с Java – использовать вызовы JNI.

    JNI требует два компонента:

    • Java-библиотека (обычно с расширением *.jar ), содержащая java-метод, который вызывает встроенную библиотеку
    • Собственная библиотека (обычно с расширением *.so для linux или *.dll для Windows), которые «выполняют работу», в этом случае «используют библиотеку OpenCV»,

    Первый из них предоставляется JavaCV и включен в ваше приложение jar . Второй – системный (Os, архитектура, …) и должен находиться в пути библиотеки java.

    Это фактическая ошибка: он не может найти libjniopencv_core.so в java.library.path . Библиотека jniopencv_core предоставляется также JavaCV, но установлена ​​где-то в системе (например, /usr/lib/ ) и, таким образом, не включена в финальную jar .

    Даже если вы найдете способ включить его в окончательное приложение, эта библиотека должна будет использовать библиотеки OpenCV, которые также не установлены в системе. Подводя итог потребностям:

    1. JavaCV java-библиотека , которая будет вызывать (с JNI):
    2. Собственная библиотека JavaCV , которая будет использовать:
    3. Библиотеки OpenCV , которые действительно будут работать.

    Без этого приложения приложение не будет работать. Таким образом, OpenCV и JavaCV должны быть установлены в систему.