52

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

我确实把它放在了.so一个已经在类路径中的文件夹中,但是我的应用程序仍然抱怨没有所需.so的文件java.library.path

我想找到:

  1. 添加.so方法java.library.path
  2. 如何知道它是否已经添加(添加时)
4

5 回答 5

78

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

        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/some/pathOfContainingDirectory

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

于 2013-04-26T09:40:07.593 回答
7

我在弄清楚这一点时遇到了很多麻烦,请确保您lib在库名称中有前缀。

所以步骤,

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

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

    mv JNIDemo.so libJNIDemo.so
    

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

于 2016-07-23T21:48:38.873 回答
3

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

于 2013-11-19T10:46:12.977 回答
1

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

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

这适用于安装了 java 11 opensdk 的 ubuntu 18.04。

$ locate libjawt.so
$ java -XshowSettings:properties

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

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

我为 java ll open sdk 创建了一个符号链接来查找库,我的如下所示,因为 /usr/lib 是输出中的路径之一。如果您想将 java 库(甚至符号链接)保持在一起,那么(在我的输出中)您可以选择使用 java 路径而不是 /usr/lib。

sudo ln -s /usr/lib/jvm/java-11-openjdk-amd64/lib/libjawt.so /usr/lib/libjawt.so
于 2019-03-15T21:21:59.040 回答
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;
        }
    }
}
于 2016-07-18T02:47:47.093 回答