Как добавить внешнюю библиотеку (файл OpenCV .jar) в путь сборки Java из командной строки (Unix)

1

Я пытаюсь добавить библиотеку OpenCV к пути сборки для моей программы Java из терминала, чтобы я мог использовать сценарий оболочки для запуска программы на связке файлов изображений последовательно. Файлы.class для моего проекта находятся в Documents/Programming/Ko/bin, а файл.jar для библиотеки OpenCV находится в документах/Программе /opencv-2.4.10/build/bin. Как было предложено из нескольких различных вопросов здесь, я попытался (пока в каталоге Ko/bin):

java -cp "/Users/jordan/Documents/Programming/opencv-2.4.10/build/bin/*:." Ko <image_name>

Из-за чего возникает следующая ошибка:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java2410 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1119)
    at Ko.main(Ko.java:37)  

Таким образом, программа попадает в проблему по строке 37. Эта строка:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);  

Я добавил эту строку после запуска проблем, загружающих библиотеку OpenCV в Eclipse, из совета другого вопроса здесь, хотя я не совсем уверен, что он делает или почему это необходимо. Когда я пытаюсь прокомментировать эту строку, я получаю аналогичную ошибку:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_0(Ljava/lang/String;I)J
    at org.opencv.highgui.Highgui.imread_0(Native Method)
    at org.opencv.highgui.Highgui.imread(Highgui.java:309)
    at Ko.main(Ko.java:39)  

На этот раз в строке 39, которая логически является первым вызовом метода из библиотеки OpenCV.

Насколько я могу судить, способ, которым я пишу команду java -cp... идентичен тому, что сработало для других из вопросов, которые я читал здесь. Если кто-нибудь скажет мне, где я ошибаюсь, и мог бы объяснить, почему вызов в System.loadLibrary() необходим в этом конкретном случае, когда в других случаях импорта библиотек это не так, было бы весьма полезно.

Теги:
opencv
terminal
classpath

1 ответ

1
Лучший ответ

Проблема заключалась в том, что в командной строке не было сведений о том, где на диске были встроенные библиотеки (т.е. Файл opencv2.so). После добавления дополнительного флажка в команду и указания пути к родным библиотекам программа выполнится правильно:

java -D'java.library.path=<path to native libraries>' -cp '<path to Ko.class>:<path to opencv-2.4.x jar file>' Ko <path to input image file>

Первый флаг (-D) устанавливает переменную java.library.path в собственные библиотеки, специфичные для этого приложения, так что JRE знает, к чему привязан файл jar. Второй флаг (-cp) устанавливает путь к классу (в каких каталогах JRE ищет файлы для запуска). Эти каталоги разделяются двоеточиями (:) на OSX/Linux/Unix и разделяются точкой с запятой (;) в Windows.

Надеюсь, это поможет любому, кто столкнется с этой проблемой в будущем.

  • 0
    попробовал это, все еще получил ту же проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню