Pourquoi suis-je ce UnsatisfiedLinkError avec du code natif?
J'ai une bibliothèque appelée HelloWorld.et une sorte de programme HelloWorld.java avec ce contenu:
class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
Maintenant, quand j'essaie de le lancer HelloWorld.java j'obtiens cette erreur:
$ /usr/java1.4/bin/java HelloWorld Exception in thread "main" java.lang.UnsatisfiedLinkError: pas de HelloWorld en java.de la bibliothèque.chemin à java.lang.Chargeur de classe.loadLibrary(ClassLoader.java:1491) à java.lang.Moment de l'exécution.loadLibrary0(Runtime.java:788) à java.lang.Système.loadLibrary(Système d'.java:834) au HelloWorld.<clinit>(HelloWorld.java:7)
Des conseils?
Si votre utilisation de Linux(Ubuntu terminal), Alors s'il vous plaît jeter un oeil sur saurabhsharma123k.blogspot.dans/2017/07/...
OriginalL'auteur KNewton | 2009-04-17
Vous devez vous connecter pour publier un commentaire.
Je pense que certains points sont utiles lorsque vous obtenez ce message d'erreur:
Ex: Dans HelloWorld.java,
System.loadLibrary("HelloWorld");
libHelloWorld.so
libHelloWorld.so
HelloWorld.dll
libHelloWorld.jnilib
-Djava.library.path=PATH
.PATH
à l'endroit où vous mettez votre jni bibliothèqueIci est ma référence: https://blogs.oracle.com/moonocean/entry/a_simple_example_of_jni
OriginalL'auteur Gonnix
J'ai eu ce problème et résolu par le fait de renommer ma bibliothèque à la
libHelloWorld.so
et à la suite de Michael Myers suggestion. Je suis sur Arch Linux 64 bits.HelloWorld.c
:HelloWorld.java
:De construire et de tester:
tl;dr: mettre
lib
au début de la bibliothèque nom de fichierOriginalL'auteur Austin Adams
Où est HelloWorld.donc est-elle située? Vous avez probablement besoin de spécifier son répertoire parent en utilisant le paramètre de ligne de commande
"-Djava.library.path"
.Par exemple, si elle est dans
"/path/libs/HelloWorld.so"
, ajouter-Djava.library.path=/path/libs
comme une option lors de l'invocation dejava
. Par exemple, il est"-Djava.library.path=lib"
sur un de mes projets.Edit: Dan Dyer souligne que la variable d'environnement
LD_LIBRARY_PATH
peut également être utilisé pour cela.Édité pour préciser (c'est en fait le chemin d'accès au dossier contenant le .si le fichier).
Merci, cela n'a pas l'air mieux.
Une solution consiste à définir la variable d'environnement LD_LIBRARY_PATH.
OriginalL'auteur Michael Myers
@mmyers Merci pour la réponse. Nous avons découvert que tout ce que nous avions à faire était de changer de Système.loadLibrary du Système.charger et passer le chemin d'accès complet + nom de fichier en argument, a travaillé comme un charme.
Même avant de le faire, nous avons essayé d'utiliser l'option "-D" des paramètres et réglage de l'LD_LIBRARY_PATH, mais nous n'avons pas été couronnée de succès.
Allez comprendre! 🙂
Merci encore,
Karen
Ne pas je le sais.... Je l'aime si un jour quelqu'un pouvait m'expliquer 🙂
Ne fonctionne pas pour moi!
OriginalL'auteur KNewton