/ / java ne peut pas charger les dll en dehors de jre - java, windows, dll, jvm

java ne peut pas charger les dll en dehors de jre - java, windows, dll, jvm

Pourquoi il semble impossible de charger une bibliothèque (.dll) en Java si elle ne se trouve pas dans le dossier / jre / bin. C'est fou, mais j'ai 2 dll "s:

  • aa.dll
  • bb.dll, qui dépend de aa.dll

Si je copie ces dll "s dans C: Tmp le code suivant, il ne fonctionne pas ..... Si vous copiez ces dll "dans C: Program FilesJavajre1.8.0_25bin, le même code que cela fonctionne."

Le code, très simple:

public class Main {
public static void main(String[] args) {
System.load("C:\Tmp\ftd2xx.dll");
System.out.println("ftd2xx.dll loaded");
System.load("C:\Tmp\JD2XX.dll");
}
}

L'erreur (résultat):

ftd2xx.dll loaded
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jd2xx in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at jd2xx.JD2XX.<clinit>(JD2XX.java:729)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at Main_02.main(Main_02.java:7)

Pour être plus déroutant, une bibliothèque que je peux charger à partir de c: Tmp (aa.dll), l'autre je ne peux pas (bb.dll). Ce dernier nécessite de résider dans C: Program FilesJavajre1.8.0_25bin.

Si quelqu'un a une idée utile, j'apprécierai beaucoup.

J'ai pensé que la machine virtuelle ne voulait pas charger du code natif potentiellement dangereux ou non fiable? Et s'il réside dans le dossier jre, il considère que le code est sécurisé? Mais c'est juste une idée.

Je vous remercie.

Réponses:

-1 pour la réponse № 1

Je confirme le même: Windows 7 (64 bits); jre1.8.0_102 (32 bits); DLL "s (32 bits); Exactement la même chose mais dans mon cas, une dll (aa.dll) dépend d'un autre bb.dll (aa.dll-> bb.dll) aa.dll peut être chargé de n'importe où (un chemin de bibliothèque de projet pour ex), mais uniquement si je copie bb.dll dans le répertoire jre1.8.0_102bin; Aucune chance de charger autrement. Essayé diverses combinaisons pour définir -Djava.library.path = project_pathlib, pour définir le système PATH = project_pathlib, copiez les deux DLL vers Windowssystem32 - rien n’aide, la seule chance est de l’avoir sur jrebin

UNE MISE À JOUR:

Et vous avez répondu à votre question vous-même. C \ 'est une sécurité:

Allez dans -> Panneau de configuration Java -> Avancé -> Code mixte. Définissez "Désactiver la vérification .."

and aa.dll se charge avec succès. Les deux stockés dans project_pathlib