2013-04-26 3 views
31

Я работаю с Java-приложением, которому нужен файл .dll в java.library.path в Windows. Для запуска того же приложения в Linux У меня есть соответствующий .so файл, который должен быть добавлен к java.library.path в Linux машине, я не нашел какое-либо простое решение для этого до сих порКак добавить файл .so в файл java.library.path в Linux

я поставил .so в папке, которая уже в классе путь, но мое приложение по-прежнему жалуется там нет необходимости .so файла в java.library.path

Я хотел бы найти:

  1. способов добавить .so к java.library.path
  2. Как знать, если его уже добавили (при добавлении)

ответ

48

Добавить содержащий каталог для LD_LIBRARY_PATH перед запуском приложения

 export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/some/pathOfContainingDirectory 

Используйте java -XshowSettings:properties, чтобы показать java.library.path (и другие) значение ,

+0

Благодаря Хосе, это помогло мне. Я даже нашел другие важные вещи с этим 'java.library.path' Этот путь теряется после перезапуска системы, поэтому я добавляю его через файл/etc/profile, чтобы он автоматически добавлял, когда система перезагружается, даже с' CLASSPATH имеет связанные файлы .jar, используя эти файлы 'java.library.path' .so, перезаписывается CLASSPATH моего приложения/catalina.sh, поэтому мое приложение жаловалось на .jars и связанные с ними .so. Проблема исправлена ​​после того, как 'CLASSPATH' имеет необходимый .jar-файл, а также необходимый .so-файл в' java.library.path'. – Lihkinisak

+0

Для запутанных бегунов 'java -XshowSettings: properties'. Моя версия java выводит свойства, а затем выводит «--help». Поэтому мне нужно прокрутить вверх, чтобы увидеть настройки. – Tarrasch

3

Я использовал Java -XshowSettings: метод свойств и нашел путь к ранее установленной папке и скопировал мою так файл в эту папку

+0

Привет @Ravindu Я пробовал ваш подход. Это не работает для меня. Я изменил разрешения на 777, чтобы быть уверенным. Но никаких предложений не бывает? –

0
File file = null; 
private String[] libs_path = System.getProperty("java.library.path").split(":"); 
public boolean isInstalled() { 
    boolean isInstalled = false; 
    for(String lib : libs_path) { 
      file = new File(lib+"/"+"yourlib.so"); 
      if(file.exists()) { 
       isInstalled = true; 
       break; 
      } 
     } 
    return isInstalled; 
} 


public void install() { 
    if(!isInstalled) { 
     for(String lib: lib_path) { 
      // copy your .so to lib 
      break; 
     } 
    } 
} 
4

у меня было много хлопот выяснить это, пожалуйста, убедитесь, что у вас есть lib префикс в имени библиотеки.

Итак шаги,

  1. export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/some/pathOfContainingDirectory"

  2. Переименование библиотек иметь LIB в качестве префикса. [Добавить это как часть сценария сборки]

    mv JNIDemo.so libJNIDemo.so 
    

Проверьте этот ответ для подробного объяснения https://stackoverflow.com/a/3987567/2076566

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