如何将.so文件添加到Linux中的java.library.path

时间:2013-04-26 00:49:21

标签: linux java.library.path

我正在使用一个java应用程序,它在windows中的java.library.path中需要一个.dll文件。要在Linux中运行相同的应用程序,我有相应的.so文件应该添加到linux机器中的java.library.path,到目前为止我找不到任何简单的解决方案

我确实将.so放在已经在类路径中的文件夹中,但我的应用程序仍抱怨.so

中没有必需的java.library.path文件

我想找到:

  1. 如何将.so添加到java.library.path
  2. 如何知道它是否已添加(添加时)

5 个答案:

答案 0 :(得分:58)

在启动应用程序之前将包含目录添加到LD_LIBRARY_PATH

        export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/some/pathOfContainingDirectory

使用java -XshowSettings:properties显示java.library.path(及其他)值。

答案 1 :(得分:6)

我在解决此问题时遇到了很多麻烦,请确保您在库名称中有lib前缀。

步骤,

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

  2. 重命名库以将lib作为前缀。 [将其添加为构建脚本的一部分]

    mv JNIDemo.so libJNIDemo.so
    
  3. 检查此答案以获取详细说明https://stackoverflow.com/a/3987567/2076566

答案 2 :(得分:3)

我使用了java -XshowSettings:properties方法,找到了先前设置的文件夹的路径,并将我的so文件复制到该文件夹​​

答案 3 :(得分: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 :(得分:0)

我相信这是一种更好的方法,因为它只需要创建一个链接,无需文件编辑,在应用程序运行前无需导出或运行源代码。不需要bashrc行。

也就是说,如果升级它,可能会导致将来的Java版本出现意外错误,因为它可能会加载过时的库,尽管删除一个链接也可以解决此问题。

这在ubuntu 18.04下工作并安装了Java 11 opensdk。

$ locate libjawt.so
$ java -XshowSettings:properties

从上面的两个命令中,您可以找到将其调整到自己的系统所需的两条路径。

sudo ln -s /path/from/locate/libjawt.so /path/from/properties/libawt.so

我为java ll打开sdk创建了一个符号链接,以查找该库,而我的代码如下,因为/ usr / lib是输出中的路径之一。如果希望将Java库(甚至符号链接)保持在一起,则可以在我的输出中使用一个Java路径来代替/ usr / lib。

sudo ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/libjawt.so /usr/lib/libjawt.so