La différence entre l'utilisation de java.de la bibliothèque.path et LD_LIBRARY_PATH
Est-il une différence entre le réglage de l'argument JVM
-Djava.library.path=/path
au début de JVM et le paramétrage de l'environnement Linux variable
export LD_LIBRARY_PATH=/path
avant la JVM est commencé?
Quels sont les avantages/inconvénients des deux approches?
Vous devez vous connecter pour publier un commentaire.
La première forme
seront traitées dans le bytecode java niveau,
System.loadLibrary
appelleraRuntime.loadLibary
, alors appelezjava/lang/ClassLoader.loadLibrary
. Dans l'appel de fonctionClassLoader.loadLibrary
, le système de la propriétéjava.library.path
sera vérifié pour obtenir le chemin d'accès complet de la bibliothèque et de passer ce chemin d'accès complet au code natif au système d'appel d'apidlopen/dlsym
, pour finalement faire de la bibliothèque est chargé. Vous pouvez consulter la source de OpenJDK référentiel. L'extrait de code suivant est le segment je copie le lien.L'avantage de cette forme est que vous obtiendrez une erreur ou un avertissement ou une exception dans le code Java, si il ya des problèmes avec votre chemin de la bibliothèque.
La deuxième forme
sera géré en natif, selon le document de
dlopen/dlsym
De cette manière, si il ya des problèmes avec votre chemin de la bibliothèque et le système ne peut pas charger votre bibliothèque, et le système ne donne pas trop d'idée de ce qu'il se passe et reste silencieuse (je suppose). Cela dépend de savoir si ou de ne pas mettre en œuvre
LD_LIBRARY_PATH
, Android n'a pas utiliséLD_LIBRARY_PATH
pour déterminer l'emplacement de la bibliothèque, vous pouvez voir Android de mise en œuvre de ici.Java peut explicitement charge libaries répertoriés avec
-Djava.library.path=...
comme décrit par alijandro.
Par exemple, si mq series est utilisé dans les liaisons mode, le chemin d'accès pour les agréments nécessaires bibliothèques peuvent être spécifiés avec
-Djava.library.path=/opt/mq/java/lib
et mqseries charge les bibliothèques.Si une bibliothèque n'est pas explcitely chargé de java, c'est à dire dépendant de la bibliothèque doit être utilisé, alors
LD_LIBRARY_PATH
doit être utilisé afin d'avoir de la bibliothèque disponible dans la jvm.