Looking for java Keywords? Try Ask4Keywords

Java Language Загрузка собственных библиотек


пример

Общая идиома для загрузки файлов общей библиотеки в Java:

public class ClassWithNativeMethods {
    static {
        System.loadLibrary("Example");
    }

    public native void someNativeMethod(String arg);
    ...

Вызовы в System.loadLibrary почти всегда статичны, чтобы происходить во время загрузки класса, гарантируя, что собственный метод не может быть запущен до того, как загружена общая библиотека. Однако возможно следующее:

public class ClassWithNativeMethods {
    // Call this before using any native method
    public static void prepareNativeMethods() {
        System.loadLibrary("Example");
    }

    ...

Это позволяет отложить загрузку общей библиотеки до тех пор, пока это не будет необходимо, но требует дополнительной осторожности, чтобы избежать java.lang.UnsatisfiedLinkError s.

Поиск целевого файла

Поиск общих файлов библиотеки осуществляется в путях, определенных системным свойством java.library.path , которые могут быть переопределены с помощью аргумента -Djava.library.path= JVM во время выполнения:

java -Djava.library.path=path/to/lib/:path/to/other/lib MainClassWithNativeMethods

Следите за разделителями системных путей: например, Windows использует ; а не :

Обратите внимание, что System.loadLibrary разрешает имена файлов библиотек зависимым от платформы образом: фрагмент кода выше ожидает файл с именем libExample.so в Linux и Example.dll в Windows.

Альтернативой System.loadLibrary является System.load(String) , которая переносит полный путь к файлу общей библиотеки, обходя поиск в java.library.path :

public class ClassWithNativeMethods {
    static {
        System.load("/path/to/lib/libExample.so");
    }

    ...