UnsatisfiedLinkError с оптимизатором Gurobi в Java - PullRequest
1 голос
/ 13 мая 2019

Я пытаюсь использовать Gurobi 8.1 в проекте Java.На моем .zshrc установлены следующие переменные среды:

export GUROBI_HOME="/home/user/tool/gurobi811/linux64"
export PATH="${PATH}:${GUROBI_HOME}/bin"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${GUROBI_HOME}/lib"
export GRB_LICENSE_FILE="/home/user/tool/gurobi811/gurobi.lic"

Это было сделано по следующим ссылкам: Руководство по установке программного обеспечения и Установка переменных среды .Это позволяет мне успешно запустить интерактивную оболочку оптимизатора.

Однако при попытке использовать оптимизатор в проекте Netbeans появляется следующая ошибка:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no GurobiJni81 in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
    at java.base/java.lang.System.loadLibrary(System.java:1867)
    at gurobi.GurobiJni.<clinit>(GurobiJni.java:261)
    at gurobi.GRBEnv.<init>(GRBEnv.java:56)
    at br.gurobi.test.main.Main.main(Main.java:31)
/home/user/project/nbproject/build-impl.xml:1328: The following error occurred while executing this line:
/home/user/project/nbproject/build-impl.xml:948: Java returned: 1
BUILD FAILED (total time: 0 seconds)

Если я используюОпция -Djava.library.path=/path/to/lib ( здесь используется ), я получаю еще одну ошибку:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/user/tool/gurobi811/linux64/lib/libGurobiJni81.so: libgurobi81.so: cannot open shared object file: No such file or directory
    at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
    at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2430)
    at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2487)
    at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2684)
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2649)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829)
    at java.base/java.lang.System.loadLibrary(System.java:1867)
    at gurobi.GurobiJni.<clinit>(GurobiJni.java:261)
    at gurobi.GRBEnv.<init>(GRBEnv.java:56)
    at br.gurobi.test.main.Main.main(Main.java:31)
/home/user/project/nbproject/build-impl.xml:1328: The following error occurred while executing this line:
/home/user/project/nbproject/build-impl.xml:948: Java returned: 1
BUILD FAILED (total time: 0 seconds)

Я добавил gurobi.jar и gurobi-javadoc.jar в мои библиотеки времени компиляции проекта.Я не нашел места в Apache Netbeans 11 для определения переменных среды.

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Я никогда не находил "хороший" способ установки переменных среды на уровне проекта / цели с более новыми версиями Netbeans.Хак, который работает, хотя добавляет глобальную настройку LD_LIBRARY_PATH к netbeans , т. Е. Отредактируйте <your netbeans install directory>/etc/netbeans.conf, включив в него строку

export LD_LIBRARY_PATH=<absolute path to the gurobi lib dir>

.Уровень ОС тоже, но это еще более уродливо.

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

0 голосов
/ 14 мая 2019

Мне удалось запустить оптимизатор, выполнив Netbeans из терминала (где все мои пользовательские переменные уже были установлены).

Тем не менее, я буду ждать ответа, который покажет, как установить переменные среды непосредственно наNetbeans.

...