2015-10-14 2 views
1

Я новичок в Linux. Я пытаюсь загрузить SO-файл в Ubuntu с помощью Java. Файл, который я указал в java-методе «System.load (/home/ab/Downloads/libtesseract.so)», загружается отлично, но его зависимый файл, размещенный в том же месте, что и «libtesseract.so», не найден. Вот сообщение об ошибке, которое я получаю. Ошибка: UnSatisfiedLinkError и говорит, что символ «liblept.so.4» не найден. Этот файл находится в том же месте, что и libtesseract.so. Когда я помещаю «liblept.so.4» в «/ lib». Он может загрузить этот файл. Поэтому я понял, что для него не для java для загрузки зависимого. Он должен быть загружен ubuntu. Поэтому я попробовал простое приложение, чтобы загрузить его, установив переменную PATH в расположение файла. И экспортировал java-код в банку и попытался запустить этот файл jar с терминала, поскольку переменная пути не является постоянной для всей системы. Он работал нормально. Поэтому я попытался сделать то же самое программно, используя приведенный ниже код, чтобы он не работал. Пожалуйста посоветуй. ТИАНевозможно загрузить зависимый файл SO в LInux

Код:

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

«Итак, я понял, что для него не для java для загрузки зависимого так. Он должен быть загружен ubuntu». - Нет, я считаю, что это задача JVM. –

+0

Спасибо за комментарий Damien ... Почему я говорю, что это потому, что First или main SO, которые я загружаю с использованием java-кода, загружаются нормально, но когда этот Main SO ищет другого зависимого So, он терпит неудачу, когда этот другой зависимый так присутствует в в том же месте. – user578219

ответ

2

Насколько я знаю, вы не можете изменять переменные окружения в Java «на лету». Это означает, что перед запуском java необходимо установить LD_LIBRARY_PATH и PATH.

+0

Вы не можете установить его в коде. Вы должны изменить среду перед запуском программы –

+1

Привет, извините, я удалил свой предыдущий комментарий. Японял твою точку зрения. Но это невозможно, так как у меня есть эти файлы So, собранные в моей банке, которые я развязываю на лету, и вам нужно использовать их из того места, где я примыкаю. – user578219

+0

Сопряженная ссылка на папку, которая в пути после unjarring? –

Смежные вопросы