Подтвердить что ты не робот

UnsatisfiedLinkError: нет opencv_java249 в java.library.path

Запуск некоторых проблем, когда часть кода запускается на моем mac. Если бы кто-то написал мне приложение для анализа изображений java, но я продолжаю получать эту ошибку при попытке запустить ее на netbeans.

run: Исключение в потоке "main" java.lang.UnsatisfiedLinkError: no opencv_java249 в java.library.path в java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) в java.lang.Runtime.loadLibrary0 (Runtime.java:870) в java.lang.System.loadLibrary(System.java:1119) в image.prossing.Test.main(Test.java:28) Java Результат: 1 BUILD SUCCESSFUL (общее время: 0 секунд)

Проведите проект netbeans и добавьте необходимые файлы jar в виде библиотек. Программист сказал мне загрузить правильную версию OpenCV и скопировать файл opencv.dll в мою папку java/jre/bin. Но я не могу найти файл dll или папку java/jre. Я знаю, что большинство программ происходит по окнам по какой-то причине. Надеюсь, кто-то может помочь мне решить эту проблему и запустить это приложение на моем Mac.

Вот первая часть кода, часть, которая, скорее всего, создает ошибку:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package image.prossing;

/**
 *
 * @author Dumith Salinda
 */
import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
import static org.opencv.core.Core.FONT_HERSHEY_SIMPLEX;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class Test {

public static void main(String[] args) {

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Извините, если это не так понятно, дайте мне знать, какую информацию добавить, если что-то отсутствует или не понятно. Поистине оцените любую помощь, которую вы могли бы дать. С уважением Меир Варсель

4b9b3361

Ответ 1

Посмотрите в свой каталог OpenCV;

Для примера это; (устанавливается с помощью brew install opencv3 --with-java --with-python3)

/usr/local/Cellar/opencv3/XXX/share/OpenCV/java

Вы увидите:

libopencv_javaXXX.so    opencv-XXX.jar

Теперь, когда у вас уже есть родная библиотека OpenCV для Java (libopencv_javaXXX.so), скомпилированная с вами, остается только динамическая библиотека Mac.

Ссылка libopencv_javaXXX.so на libopencv_javaXXX.dylib;

ln -s libopencv_javaXXX.so libopencv_javaXXX.dylib

Теперь добавьте /usr/local/Cellar/opencv3/XXX/share/OpenCV/java как Локальные локальные библиотеки в IntelliJ или что-то подобное в Eclipse.

Или добавьте это в свои аргументы JVM;

-Djava.library.path=/usr/local/Cellar/opencv3/XXX/share/OpenCV/java

Ответ 2

На Mac, работающем под управлением OSX Yosemite, я сбросил файл libopencv_java2412.dylib в /Library/Java/Extensions, и он сработал.

После создания opencv libopencv_java2412.dylib создается в/build/lib.

Ответ 3

После траты много времени и с помощью разных предложений от StackOverflow мне удалось получить решение для окон. но я также добавляю решение для mac. надеюсь, что это сработает.

  • Загрузите свою библиотеку в соответствии с конфигурацией вашей системы.

    private static void loadLibraries() {
    
        try {
            InputStream in = null;
            File fileOut = null;
            String osName = System.getProperty("os.name");
            String opencvpath = System.getProperty("user.dir");
            if(osName.startsWith("Windows")) {
                int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
                if(bitness == 32) {
                    opencvpath=opencvpath+"\\opencv\\x86\\";
                }
                else if (bitness == 64) { 
                    opencvpath=opencvpath+"\\opencv\\x64\\";
                } else { 
                    opencvpath=opencvpath+"\\opencv\\x86\\"; 
                }           
            } 
            else if(osName.equals("Mac OS X")){
                opencvpath = opencvpath+"Your path to .dylib";
            }
            System.out.println(opencvpath);
            System.load(opencvpath + Core.NATIVE_LIBRARY_NAME + ".dll");
        } catch (Exception e) {
            throw new RuntimeException("Failed to load opencv native library", e);
        }
    }
    

2. Теперь используйте этот метод в соответствии с вашими потребностями

public static void main(String[] args) {
    loadLibraries();
} 

Ответ 4

Исключение происходит из следующей строки кода:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Ваша программа пытается загрузить собственную библиотеку по имени аргумента при вызове метода loadLibrary, который он не может найти. Убедитесь, что встроенная библиотека (opencv.dll) размещена в одном из мест, присутствующих в системном свойстве java.library.path, поскольку JVM просматривает эти места для загрузки любой родной библиотеки (которая может не содержать "java/jre/bin" ).

Вы можете напечатать java.library.path в своей программе, как показано ниже:

System.out.println(System.getProperty("java.library.path"));

Ответ 5

Вы не можете просто поместить библиотеку Windows (dll файл) на Mac и запустить ее - вам нужно сначала скомпилировать библиотеку для Mac (или получить версию Mac для библиотеки).

Подробнее о том, как это сделать, см. здесь:

.dll Эквивалент в Mac OS X

Как работают сторонние библиотеки в Objective-C и Xcode?

Как использовать DLL Windows с Java в Mac OS X?

Ответ 6

Основываясь на ответе Harsh Vakharia, я попытался установить OpenCV на мой mac с помощью macports:

sudo port install opencv +java
ls /opt/local/share/OpenCV/java
libopencv_java343.dylib opencv-343.jar

Чтобы использовать эту библиотеку, я надеялся, что смогу изменить путь к библиотеке во время выполнения, что обсуждалось в

И закончили со следующим классом помощника и модульным тестом. Код теперь является частью

Self Driving RC-Car проект с открытым исходным кодом, в котором я комиттер.

JUnit Test

/**
   * @see <a href=
   *      'https://stackoverflow.com/questions/27088934/unsatisfiedlinkerror-no-opencv-java249-in-java-library-path/35112123#35112123'>OpenCV
   *      native libraries</a>
   * @throws Exception
   */
  @Test
  public void testNativeLibrary() throws Exception {
    if (debug)
      System.out.println(String.format("trying to load native library %s",
          Core.NATIVE_LIBRARY_NAME));
    assertTrue(NativeLibrary.getNativeLibPath().isDirectory());
    assertTrue(NativeLibrary.getNativeLib().isFile());
    NativeLibrary.load();
  }

NativeLibrary

package com.bitplan.opencv;

import java.io.File;
import java.lang.reflect.Field;
import java.util.Arrays;

import org.opencv.core.Core;

/**
 * load OpenCV NativeLibrary properly
 */
public class NativeLibrary {
  protected static File nativeLibPath = new File("../lib");

  /**
   * get the native library path
   * 
   * @return the file for the native library
   */
  public static File getNativeLibPath() {
    return nativeLibPath;
  }

  /**
   * set the native library path
   * 
   * @param pNativeLibPath
   *          - the library path to use
   */
  public static void setNativeLibPath(File pNativeLibPath) {
    nativeLibPath = pNativeLibPath;
  }

  /**
   * get the current library path
   * 
   * @return the current library path
   */
  public static String getCurrentLibraryPath() {
    return System.getProperty("java.library.path");
  }

  /**
   * Adds the specified path to the java library path
   *
   * @param pathToAdd
   *          the path to add
   * @throws Exception
   * @see <a href=
   *      '/questions/547873/adding-new-paths-for-native-libraries-at-runtime-in-java'>Stackoverflow
   *      question how to add path entry to native library search path at
   *      runtime</a>
   */
  public static void addLibraryPath(String pathToAdd) throws Exception {
    final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
    usrPathsField.setAccessible(true);

    // get array of paths
    final String[] paths = (String[]) usrPathsField.get(null);

    // check if the path to add is already present
    for (String path : paths) {
      if (path.equals(pathToAdd)) {
        return;
      }
    }

    // add the new path
    final String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
    newPaths[newPaths.length - 1] = pathToAdd;
    usrPathsField.set(null, newPaths);
  }

  public static File getNativeLib() {
    File nativeLib = new File(getNativeLibPath(),
        "lib" + Core.NATIVE_LIBRARY_NAME + ".dylib");
    return nativeLib;
  }

  /**
   * load the native library by adding the proper library path
   * 
   * @throws Exception
   *           - if reflection access fails (e.g. in Java9/10)
   */
  public static void load() throws Exception {
    addLibraryPath(getNativeLibPath().getAbsolutePath());
    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
  }

}

Ответ 7

Просто добавьте в путь папку, в которой находится ваш opencv_java249.dll; это будет что-то вроде C:\bin\opencv\build\java\x32 или C:\bin\opencv\build\java\x64 в зависимости от вашей машинной архитектуры. Проблема в том, что java.library.path является фактически переменной path.

Ответ 8

netebans right klick project chosew properti выберите run, work direktory, нажмите "Изменение браузера" в папку opencv, release/lib,