2013-04-26 8 views
31

Ich arbeite mit einer Java-Anwendung, die eine .dll-Datei in java.library.path in Windows benötigt. Zum Ausführen derselben Anwendung in Linux Ich habe die entsprechende .so-Datei, die auf java.library.path in Linux-Maschine hinzugefügt werden soll, habe ich nicht jede einfache Lösung für diesen bisher findenWie .so Datei zu dem java.library.path in Linux hinzufügen

ich die .so in einem Ordner abgelegt habe, die bereits in der Klasse Weg, aber meine Anwendung klagt noch keine erforderlich .so Datei in java.library.path

Ich mag würde finden:

  1. Ways hinzufügen .so-java.library.path
  2. Wie kann man wissen, ob seine bereits hinzugefügt (wenn hinzugefügt)

Antwort

48

das enthält Verzeichnis LD_LIBRARY_PATH hinzufügen, bevor Sie die Anwendung

 export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/some/pathOfContainingDirectory 

Verwenden java -XshowSettings:properties Start des java.library.path (und andere) Wert anzuzeigen .

+0

Dank Jose, das mir geholfen hat. Ich fand sogar andere wichtige Dinge mit diesem 'java.library.path' Dieser Pfad ist nach dem Neustart des Systems verloren, so dass ich es durch/etc/profile-Datei hinzufügen, so dass es automatisch beim Neustart des Systems fügt, sogar die' CLASSPATH', die .jar-Dateien mit diesen 'java.library.path' .so-Dateien in Verbindung gebracht haben, wird durch den CLASSPATH meiner Anwendung/catalina.sh überschrieben, so dass sich meine Anwendung über die .jars und die zugehörigen .so-Dateien beschwerte. Problem ist behoben, wenn 'ClASSPATH' die erforderliche .jar-Datei und auch die erforderliche .so-Datei in' java.library.path' enthält. – Lihkinisak

+0

Für die verwirrten Läufer von 'java -XshowSettings: properties'. Meine Version von Java druckt die Eigenschaften aus und druckt dann 'help' aus. Also muss ich nach oben scrollen, um die Einstellungen zu sehen. – Tarrasch

3

I java -XshowSettings verwendet: Eigenschaften Methode und fand den Weg eines zuvor festgelegten Ordner und kopiert meine so in diesen Ordner dieses heraus herauszufinden, bitte stellen Sie sicher,

+0

Hallo @Ravindu Ich versuchte Ihren Ansatz. Es funktioniert nicht für mich. Ich habe die Berechtigungen nur auf 777 geändert. Aber nichts passiert irgendwelche Vorschläge? –

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

ich eine Menge Ärger anmelden musste, dass Sie haben lib Präfix im Bibliotheksnamen.

So Schritte,

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

  2. Bibliotheken umbenennen lib als Präfix haben. [Fügen Sie diese als Teil des Build-Skript]

    mv JNIDemo.so libJNIDemo.so 
    

prüfen diese Antwort für detaillierte Erklärung https://stackoverflow.com/a/3987567/2076566