UnsatisfiedLinkError в System.loadLibrary () после добавления каталога в java .library.path - PullRequest
3 голосов
/ 14 июля 2020

Я хотел бы загрузить локальную библиотеку /opt/gurobi902/linux64/lib/libGurobiJni90.so в свой Java проект IntelliJ Maven в Ubuntu 19.10.

Моя первая попытка заключалась в добавлении переменной среды LD_LIBRARY_PATH следующим образом: export LD_LIBRARY_PATH="/opt/gurobi902/linux64/lib" (я знаю Я полностью перезаписал его вместо того, чтобы добавлять к нему, потому что он вообще не был установлен ранее.)

Я думал, что это сработало, потому что когда я запускаю команду терминала java -XshowSettings:propertiesjava -XshowSettings:properties, она возвращает это (среди прочего) :

java.library.path = /opt/gurobi902/linux64/lib
        /usr/java/packages/lib
        /usr/lib/x86_64-linux-gnu/jni
        /lib/x86_64-linux-gnu
        /usr/lib/x86_64-linux-gnu
        /usr/lib/jni
        /lib
        /usr/lib

НО когда я хочу загрузить библиотеку в свой проект с помощью System.loadLibrary("GurobiJni90"), я получаю следующее исключение:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no GurobiJni90 in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]

Как видите, каталог, который я добавил ранее, не указан в java.library.path оператора исключения.

Btw. это моя pom.xml запись для библиотеки:

<dependency>
    <groupId>com.gurobi</groupId>
    <artifactId>gurobi</artifactId>
    <version>9.0.2</version>
    <scope>system</scope>
    <systemPath>/opt/gurobi902/linux64/lib/gurobi.jar</systemPath>
</dependency>

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Переменная среды LD_LIBRARY_PATH должна указывать на каталог (или его список), а не на конкретную c библиотеку. Это также описано в руководстве по установке Gurobi .

0 голосов
/ 14 июля 2020

Проблема устранена!

Похоже, что мой linux дистрибутив (Ubuntu 19.10) не позволяет приложениям читать .bashrc файл, в котором установлены переменные среды. Это объясняет, почему java.library.path содержит различное содержимое при доступе с терминала или моего собственного проекта IntelliJ.

В Руководстве по установке Gurobi упоминается эта проблема (но я думал, что меня это не коснулось):

В некоторых дистрибутивах Linux приложения, запускаемые с рабочего стола Linux, не читают .bashr c (или .cshr c). Вместо этого вам может потребоваться установить переменные среды Gurobi в .bash_profile или .profile. К сожалению, детали того, где установить эти переменные, сильно различаются в разных дистрибутивах Linux. Мы предлагаем вам обратиться к документации для вашего дистрибутива, если у вас возникнут проблемы.

Я вручную добавил переменные среды в свой проект в IntelliJ через меню [Выполнить]> [Изменить конфигурации]> [Переменные среды], так как они мне нужны только в этом проекте. У меня работает!

...