2013-04-26 19 views
31

Pracuję z aplikacją java, która wymaga pliku .dll w pliku java.library.path w systemie Windows. Aby uruchomić tę samą aplikację w Linuksie Mam odpowiedni plik .so który powinien być dodany do java.library.path w maszynie linux, nie znalazłem żadnego łatwe rozwiązanie tego dotychczasJak dodać plik .so do java.library.path w systemie Linux

zrobiłem umieścić .so w folderze, który jest już w klasie ścieżka, ale moja aplikacja wciąż narzeka nie ma wymagany plik .so w java.library.path

Chciałbym znaleźć:

  1. sposobów, aby dodać .so do java.library.path
  2. Jak wiedzieć, czy jej już dodane (po dodaniu)

Odpowiedz

48

Dodaj katalog zawierający do LD_LIBRARY_PATH przed uruchomieniem aplikacji

 export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/some/pathOfContainingDirectory 

Zastosowanie java -XshowSettings:properties pokazać java.library.path (i inne) Wartość .

+0

Dzięki Jose, to pomogło mi. Znalazłem nawet inne ważne rzeczy z tym 'java.library.path' Ta ścieżka jest tracona po ponownym uruchomieniu systemu, więc dodaję go przez plik/etc/profile tak, że automatycznie dodaje on po ponownym uruchomieniu systemu, nawet" CLASSPATH' zawierające powiązane pliki .jar używające tych plików 'java.library.path' .so jest nadpisywane przez CLASSPATH mojej aplikacji/catalina.sh, więc moja aplikacja skarżyła się na .jars i powiązane .so. Problem został rozwiązany, gdy 'ClASSPATH' zawiera wymagany plik .jar, a także wymagany plik .so w' java.library.path'. – Lihkinisak

+0

Dla zagmatwanych uczestników 'java -XshowSettings: properties'. Moja wersja java wypisuje właściwości, a następnie wypisuje '--help'. Muszę więc przewinąć w górę, aby zobaczyć ustawienia. – Tarrasch

3

użyłem -XshowSettings Java: właściwości i metody znaleźć ścieżkę uprzednio ustalonym folderze i kopiowane tak mój plik do tego folderu

+0

Witam @Ravindu Próbowałem Twojego podejścia. To nie działa dla mnie. Zmieniłem te uprawnienia na 777 tylko po to, żeby się upewnić. Ale nic nie dzieje się żadnych sugestii? –

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

miałem wiele kłopotów to zastanawianie się, upewnij się, że masz prefiks lib w nazwie biblioteki.

So kroki,

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

  2. Zmień nazwę biblioteki mieć lib jako przedrostek. [Add to jako część kompilacji skryptu]

    mv JNIDemo.so libJNIDemo.so 
    

Sprawdź to odpowiedź na szczegółowe wyjaśnienie https://stackoverflow.com/a/3987567/2076566

Powiązane problemy