javaCV Неудовлетворенная ссылкаОррор

У меня проблема с JavaCV.

Я скачал javaCV-bin

и я добавил файл .jar в свой проект в справочные библиотеки на Ubuntu

Я мог бы работать с образцами кодов, которые находятся в загруженном файле.

Но ошибка

Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/libjniopencv_core3835922554849797701.so: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1750)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1646)
at java.lang.Runtime.load0(Runtime.java:787)
at java.lang.System.load(System.java:1022)
at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:403)
at com.googlecode.javacpp.Loader.load(Loader.java:342)
at com.googlecode.javacpp.Loader.load(Loader.java:316)
at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:131)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.googlecode.javacpp.Loader.load(Loader.java:335)
at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:96)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.googlecode.javacpp.Loader.load(Loader.java:335)
at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:91)
at com.googlecode.javacv.OpenCVFrameGrabber.start(OpenCVFrameGrabber.java:171)
at MotionDetector.main(MotionDetector.java:23)

Как я могу решить проблему? Как настроить javaCV на Ubuntu 11.10 для решения проблемы.

Спасибо за помощь


person user1291468    schedule 21.05.2012    source источник


Ответы (3)


README указывает необходимое программное обеспечение:

* OpenCV 2.4.0 http://sourceforge.net/projects/opencvlibrary/files/#

Я предполагаю, что это проблема.

person Jivings    schedule 21.05.2012
comment
Спасибо. Я хочу просто захватить изображение с помощью веб-камеры в java на Ubuntu 11.10. Но у меня ошибка конфигурации javacv. Я не понимаю, что я :) - person user1291468; 22.05.2012
comment
Пожалуйста. Я ничего не знаю об этой библиотеке, поэтому вам придется задать другой вопрос, если вам нужна дополнительная информация. Не забывайте всегда читать README. - person Jivings; 22.05.2012
comment
@user1291468 user1291468 Не забудьте отметить ответы как правильные, нажав на значок tick. - person Jivings; 22.05.2012
comment
Но моя проблема не просто решилась. Может быть, пользователь скажет, как я решаю проблему - person user1291468; 22.05.2012
comment
не устраняет ту же проблему Исключение в потоке main java.lang.UnsatisfiedLinkError: /tmp/libjniopencv_core3835922554849797701.so: libopencv_core.so.2.4: невозможно открыть общий объектный файл: нет такого файла или каталога - person user1291468; 22.05.2012
comment
Вы тогда установили библиотеку opencv? - person Jivings; 22.05.2012

чувак скачать библиотеку по ссылке:

https://code.google.com/p/javacv/downloads/detail?name=javacv-0.5-cppjars.zip&can=2&q=

и добавьте в свой проект библиотеку opencv-linux-x86.jar

person sjkoladiya    schedule 13.08.2013

Это вступает в игру, когда родная библиотека не может быть загружена или когда вы пытаетесь создать jar-файл своей программы. Поскольку файлы .dll в основном написаны на c/c++, jvm не может включить их в файл jar или выдает ошибку компоновки при попытке запустить вашу программу. Но для openCV вы используете эту часть для успешной загрузки файла dll.

Просто создайте класс Java, скопируйте и вставьте этот код и используйте метод для успешной загрузки файла dll.

    /**
     * The minimum length a prefix for a file has to have according to {@link File#createTempFile(String, String)}}.
     */
    private static final int MIN_PREFIX_LENGTH = 3;
    public static final String NATIVE_FOLDER_PATH_PREFIX = "nativeutils";

    /**
     * Temporary directory which will contain the DLLs.
     */
    private static File temporaryDir;

    /**
     * Private constructor - this class will never be instanced
     */
    private NativeUtils() {
    }

    /**
     * Loads library from current JAR archive
     * 
     * The file from JAR is copied into system temporary directory and then loaded. The temporary file is deleted after
     * exiting.
     * Method uses String as filename because the pathname is "abstract", not system-dependent.
     * 
     * @param path The path of file inside JAR as absolute path (beginning with '/'), e.g. /package/File.ext
     * @throws IOException If temporary file creation or read/write operation fails
     * @throws IllegalArgumentException If source file (param path) does not exist
     * @throws IllegalArgumentException If the path is not absolute or if the filename is shorter than three characters
     * (restriction of {@link File#createTempFile(java.lang.String, java.lang.String)}).
     * @throws FileNotFoundException If the file could not be found inside the JAR.
     */
    public static void loadLibraryFromJar(String path) throws IOException {
 
        if (null == path || !path.startsWith("/")) {
            throw new IllegalArgumentException("The path has to be absolute (start with '/').");
        }
 
        // Obtain filename from path
        String[] parts = path.split("/");
        String filename = (parts.length > 1) ? parts[parts.length - 1] : null;
 
        // Check if the filename is okay
        if (filename == null || filename.length() < MIN_PREFIX_LENGTH) {
            throw new IllegalArgumentException("The filename has to be at least 3 characters long.");
        }
 
        // Prepare temporary file
        if (temporaryDir == null) {
            temporaryDir = createTempDirectory(NATIVE_FOLDER_PATH_PREFIX);
            temporaryDir.deleteOnExit();
        }

        File temp = new File(temporaryDir, filename);

        try (InputStream is = NativeUtils.class.getResourceAsStream(path)) {
            Files.copy(is, temp.toPath(), StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            temp.delete();
            throw e;
        } catch (NullPointerException e) {
            temp.delete();
            throw new FileNotFoundException("File " + path + " was not found inside JAR.");
        }

        try {
            System.load(temp.getAbsolutePath());
        } finally {
            if (isPosixCompliant()) {
                // Assume POSIX compliant file system, can be deleted after loading
                temp.delete();
            } else {
                // Assume non-POSIX, and don't delete until last file descriptor closed
                temp.deleteOnExit();
            }
        }
    }

    private static boolean isPosixCompliant() {
        try {
            return FileSystems.getDefault()
                    .supportedFileAttributeViews()
                    .contains("posix");
        } catch (FileSystemNotFoundException
                | ProviderNotFoundException
                | SecurityException e) {
            return false;
        }
    }

    private static File createTempDirectory(String prefix) throws IOException {
        String tempDir = System.getProperty("java.io.tmpdir");
        File generatedDir = new File(tempDir, prefix + System.nanoTime());
        
        if (!generatedDir.mkdir())
            throw new IOException("Failed to create temp directory " + generatedDir.getName());
        
        return generatedDir;
    }

person Redolf Kendrick    schedule 01.12.2020