1
votes

UnsatisfiedLinkError avec Gurobi Optimizer en Java

J'essaye d'utiliser Gurobi 8.1 dans un projet Java. J'ai défini les variables d'environnement suivantes sur mon .zshrc :

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)

Cela a été fait selon ces liens: Guide d'installation du logiciel et Définition des variables d'environnement . Cela me permet d'exécuter avec succès le shell interactif de l'optimiseur.

Cependant, j'obtiens l'erreur suivante lorsque j'essaie d'utiliser l'optimiseur dans un projet 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)

Si j'utilise l'option -Djava.library.path = / path / to / lib ( comme utilisé ici ), j'obtiens une autre erreur:

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"

J'ai ajouté à la fois gurobi.jar et gurobi- javadoc.jar dans les bibliothèques de compilation de mon projet. Je n'ai pas trouvé de place dans Apache Netbeans 11 pour définir les variables d'environnement.


1 commentaires

Il semble que quelqu'un d'autre a également eu votre problème avec NetBeans 8.2 / Gurobi 8.1 , bien qu'aucune solution n'ait été proposée.


3 Réponses :


0
votes

Je pourrais réussir à exécuter l'optimiseur en exécutant Netbeans depuis le terminal (où toutes mes variables utilisateur étaient déjà définies).

Néanmoins, j'attendrai une réponse qui montre comment définir des variables d'environnement directement sur Netbeans.


0 commentaires

1
votes

Je n'ai jamais trouvé un moyen "sympa" de définir des variables d'environnement au niveau projet / cible avec les nouvelles versions de Netbeans. Un hack qui fonctionne cependant est d'ajouter le paramètre LD_LIBRARY_PATH globalement à netbeans , c'est-à-dire éditer /etc/netbeans.conf pour inclure la ligne

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

On pourrait définir de telles variables d'environnement globalement au niveau du système d'exploitation, mais c'est encore plus moche.

Une meilleure solution serait une solution personnalisée Script Ant dans le projet Netbeans qui définit les variables d'environnement appropriées, mais comme le hack ci-dessus est assez bon pour mon objectif, je n'ai jamais poursuivi cela plus loin.


0 commentaires

0
votes

J'ai le même problème avec IntelliJ et voici ma solution: lancez simplement votre IDE depuis le terminal et essayez d'exécuter votre programme. Autant que j'ai remarqué, les variables d'environnement globales définies dans .zshrc (fichier .bashrc dans mon cas puisque j'utilise Ubuntu) seront chargées et le programme fonctionnera!


0 commentaires