2013-04-26 136 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

相关问题