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

Как добавить файл .so в файл java.library.path в Linux

Я работаю с java-приложением, которому нужен файл .dll в java.library.path в окнах. Для запуска такого же приложения в Linux у меня есть соответствующий .so файл, который следует добавить в java.library.path в Linux-машине, я пока не нашел для этого простого решения.

Я поместил .so в папку, которая уже находится в пути к классу, но мое приложение все еще жалуется, что в java.library.path

нет файла .so

Я бы хотел найти:

  • Способы добавления .so в java.library.path
  • Как узнать, добавлено ли уже добавленное (добавлено)
4b9b3361

Ответ 1

Добавьте содержащий каталог в LD_LIBRARY_PATH перед запуском приложения

        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/some/pathOfContainingDirectory

Используйте java -XshowSettings:properties чтобы показать значение java.library.path (и других).

Ответ 2

У меня возникли проблемы с этим, пожалуйста, убедитесь, что у вас есть префикс lib в имени библиотеки.

Итак, шаги,

  • export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/some/pathOfContainingDirectory"

  • Переименуйте библиотеки, чтобы lib был префиксом. [Добавить это как часть сборки script]

    mv JNIDemo.so libJNIDemo.so
    

Проверьте этот ответ для подробного объяснения fooobar.com/questions/158300/...

Ответ 3

Я использовал метод java -XshowSettings: properties и нашел путь к ранее установленной папке и скопировал мой файл в эту папку

Ответ 4

File file = null;
private String[] libs_path = System.getProperty("java.library.path").split(":");
public boolean isInstalled() {
    boolean isInstalled = false;
    for(String lib : libs_path) {
            file = new File(lib+"/"+"yourlib.so");
            if(file.exists()) {
                isInstalled = true;
                break;
            }
        }
    return isInstalled;
}


public void install() {
    if(!isInstalled) {
        for(String lib: lib_path) {
             // copy your .so to lib
             break;
        }
    }
}

Ответ 5

Я считаю, что это лучший способ сделать это, так как для этого нужно создать только одну единственную ссылку, не нужно редактировать файлы, не нужно экспортировать или запускать исходный код до запуска приложения. И никаких линий bashrc не требуется.

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

Это работает под Ubuntu 18.04 с установленным java 11 opensdk.

$ locate libjawt.so
$ java -XshowSettings:properties

Из двух команд, приведенных выше, вы можете найти два пути, которые вам понадобятся для настройки вашей системы.

sudo ln -s /path/from/locate/libjawt.so /path/from/properties/libawt.so

Я сделал символическую ссылку для java ll, чтобы открыть sdk, чтобы найти библиотеку, и у меня было следующее, потому что /usr/lib - один из путей в выводе. В моем выводе есть путь java, который вы можете использовать вместо /usr/lib, если вы хотите сохранить библиотеку java (даже символические ссылки) вместе.

sudo ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/libjawt.so /usr/lib/libjawt.so