2013-04-29 4 views
2

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

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.<clinit>(opencv_core.java:136) 
at mains.<clinit>(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) 

ответ

4

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

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

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

Проблема не библиотека 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.<clinit>(opencv_core.java:136) 

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

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

  • ява библиотека (обычно с расширением *.jar), содержащий метод Java, который вызывает нативный библиотека
  • Уроженец библиотека (обычно с расширением *.so для Linux или *.dll для окон), что «делать свою работу», в этом случае, что «использовать библиотеку 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 должны быть установлены в систему.

+1

В моей системе установлен OpenCV. Когда я пытаюсь запустить проект из затмения, все работает отлично. но когда я пытаюсь сделать то же самое из runnabelJar, это не так. Проблема, я нашел, что я не включил DLL-файлы, поэтому как мне это сделать. –

+0

Облицовка одной и той же проблемы.Пожалуйста, помогите – slaveCoder

+0

@ABC http://stackoverflow.com/a/19202226/1847899 –

Смежные вопросы