2013-04-26 61 views
31

我正在使用一個Java應用程序,它需要在Windows中的java.library.path中有一個.dll文件。在Linux中運行我有各自的.so文件應在Linux機器加入到java.library.path相同的應用程序,我沒有找到這個到目前爲止如何將.so文件添加到Linux中的java.library.path中

我沒把它已經在類文件夾中的.so任何簡單的解決方案路徑,但我的應用程序仍然抱怨有沒有需要.so文件中java.library.path

我想找到:

  1. 途徑.so添加到java.library.path
  2. 如何知道它已經加入(加時)

回答

48

啓動應用程序

 export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/some/pathOfContainingDirectory 

使用java -XshowSettings:properties展現的java.library.path(及其他)值之前添加含目錄LD_LIBRARY_PATH

+0

感謝何塞,這幫助了我。 我甚至發現這個'java.library.path'有其他重要的東西 這個路徑在重新啓動系統後丟失了,所以我通過/ etc/profile文件添加它,以便它在系統重新啓動時自動添加,即使是'使用這些'java.library.path' .so文件的CLASSPATH'有相關的.jar文件被我的應用程序啓動的/ catalina.sh的CLASSPATH覆蓋,因此我的應用程序正在抱怨.jars和相關的.so文件。 一旦'ClASSPATH'具有所需的.jar文件以及'java.library.path'中所需的.so文件,就會修復問題。 – Lihkinisak 2013-05-01 17:10:33

+0

對於'java -XshowSettings:properties'的困惑跑步者。我的java版本打印出屬性,然後打印'--help'。所以我需要向上滾動才能看到設置。 – Tarrasch 2015-11-23 09:38:49

3

我用java -XshowSettings:性質方法,發現了一個預先設定的文件夾的路徑,並複製我這樣文件到文件夾

+0

嗨@Ravindu我試過你的方法。它不適合我。爲了確保,我將權限更改爲777。但沒有發生任何建議? – 2015-10-07 06:12:43

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

相關問題