2015-10-14 3 views
1

Je suis nouveau sur linux. J'essaie de charger un fichier SO dans Ubuntu en utilisant Java. Le fichier que j'ai spécifié dans la méthode java "System.load (/home/ab/Downloads/libtesseract.so)" se charge bien mais son fichier dépendant placé au même endroit que "libtesseract.so" est introuvable. Voici le message d'erreur que je reçois. Erreur: UnSatisfiedLinkError et dit "liblept.so.4" cound pas trouvé. Ce fichier est placé au même emplacement que libtesseract.so. Quand je place "liblept.so.4" dans le "/ lib". Il est capable de charger ce fichier. Donc ce que j'ai compris est que, pour Java, il n'est pas nécessaire de charger le dépendant. Il doit être chargé par Ubuntu. J'ai donc essayé une application simple pour charger ceci en définissant la variable PATH avec l'emplacement du fichier so. Et exporté le code java dans un pot et essayé d'exécuter ce fichier jar à partir du terminal car la variable de chemin n'est pas persistante pour l'ensemble du système. Cela a bien fonctionné. J'ai donc essayé de faire la même chose par programmation en utilisant le code ci-dessous pour ne pas fonctionner. Veuillez nous conseiller TIAImpossible de charger le fichier SO dépendant dans LInux

code:

ProcessBuilder pb = new ProcessBuilder("/bin/sh"); 
    Map<String, String> envMap = pb.environment(); 
    envMap.put("LD_LIBRARY_PATH", "/home/ab/Downloads"); 
    envMap.put("PATH", "/home/ab/Downloads"); 
    Set<String> keys = envMap.keySet(); 
    for(String key:keys) 
    { 
     System.out.println(key+" ==> "+envMap.get(key)); 
    } 
    System.load("/home/ab/Downloads/libtesseract.so"); 
+0

"Donc ce que j'ai compris, c'est que ce n'est pas à Java de charger le dépendant, il doit être chargé par Ubuntu." - Non, je crois que c'est le travail de la JVM à faire. –

+0

Merci pour le commentaire Damien ... Pourquoi je dis cela parce que le premier ou le principal SO que je charge en utilisant le code java se charge bien mais quand ce SO principal cherche d'autres dépendants Donc, il échoue lorsque cette autre dépendante est présente dans le même endroit. – user578219

Répondre

2

Pour autant que je sais que vous ne pouvez pas modifier réellement les variables d'environnement Java « à la volée ». Cela signifie que vous devez définir LD_LIBRARY_PATH et PATH avant d'exécuter java.

+0

Vous ne pouvez pas le définir en code. Vous devriez changer les environnements avant d'exécuter le programme –

+1

Salut, désolé, j'ai supprimé mon commentaire précédent. Je comprends ton point de vue. Mais ce n'est pas possible puisque j'ai ces fichiers So groupés dans mon pot que je unjar à la volée et que j'ai besoin de les utiliser depuis l'endroit où je suis. – user578219

+0

Lien hypertexte vers le dossier dans le chemin après avoir été déconnecté? –