繁体   English   中英

Java 在 java.library.path 中找不到库

[英]Java cannot find library in java.library.path

尽管以下打印出它应该在库中查找的路径,但未找到 wolfcrypt_jni。 它在今天之前有效,所以我不确定发生了什么变化。

SystemExample.java

package com.examples.system;

public class SystemExample {

    public static void main(String[] args) {
        System.out.println(System.getProperty("java.library.path"));
        System.out.println(System.getenv("LD_LIBRARY_PATH"));

    }
}

/home/andrew/Keiros/Common/external/wolfcrypt_jni/lib:/home/andrew/KeirosPublic/bazel-bin/Network/Client:/usr/java/packages/lib:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
/home/andrew/Keiros/Common/external/wolfcrypt_jni/lib:/home/andrew/KeirosPublic/bazel-bin/Network/Client

然后

ls /home/andrew/Keiros/Common/external/wolfcrypt_jni/lib

产生

jni_aes.o         jni_dh.o              jni_fips.o           jni_rng.o           wolfcrypt-jni.jar
jni_asn.o         jni_ecc.o             jni_hmac.o           jni_rsa.o
jni_chacha.o      jni_ed25519.o         jni_logging.o        jni_sha.o
jni_curve25519.o  jni_error.o           jni_md5.o            **libwolfcryptjni.so**
jni_des3.o        jni_feature_detect.o  jni_native_struct.o  signed

但是当我运行我的测试程序时,出现以下错误。

java.lang.UnsatisfiedLinkError: no wolfcryptjni in java.library.path: [/home/andrew/.cache/bazel/_bazel_andrew/a291ce2094be2be5cad6bc87a23a0680/sandbox/linux-sandbox/5919/execroot/com_keiros/bazel-out/k8-fastbuild/bin/javatests/com/keiros/reactor/networking/NetworkingReactorTest.runfiles/com_keiros/external/keiros_public/Network/Client, /home/andrew/.cache/bazel/_bazel_andrew/a291ce2094be2be5cad6bc87a23a0680/sandbox/linux-sandbox/5919/execroot/com_keiros/bazel-out/k8-fastbuild/bin/javatests/com/keiros/reactor/networking/NetworkingReactorTest.runfiles/com_keiros/_solib_k8, /home/andrew/.cache/bazel/_bazel_andrew/a291ce2094be2be5cad6bc87a23a0680/sandbox/linux-sandbox/5919/execroot/com_keiros/bazel-out/k8-fastbuild/bin/javatests/com/keiros/reactor/networking/NetworkingReactorTest.runfiles/com_keiros/_solib_k8/_U@wolfssl_S_S_Cwolfssl___Ubuild]
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2670)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
    at java.base/java.lang.System.loadLibrary(System.java:1873)
    at com.wolfssl.wolfcrypt.WolfObject.<clinit>(WolfObject.java:34)
    at com.keiros.security.encryption.EncryptionHelper.<clinit>(EncryptionHelper.java:37)
    at com.keiros.reactor.testing.ReactorTestFixture.beforeClass(ReactorTestFixture.java:134)
    at com.keiros.reactor.networking.NetworkingReactorTest.beforeClass(NetworkingReactorTest.java:25)

MinimalExample.java

package minimal;

import org.junit.*;
import java.util.*;

import com.wolfssl.wolfcrypt.Aes;
public class MinimalExample {
@Test 
public void testThis() {
    byte[] CDRIVES = HexFormat.of().parseHex("e04fd020ea3a6910a2d808002b30309d");
    Aes aes = new Aes(CDRIVES, null, Aes.ENCRYPT_MODE);
}
}

这是失败的文件。

package com.wolfssl.wolfcrypt;

/**
 * Loader for the native WolfCrypt implementation.
 * All classes in this package must inherit from it.
 *
 * @author Moisés Guimarães
 * @version 1.0, March 2015
 */
public class WolfObject {

    static {
        System.loadLibrary("wolfcryptjni");
    }

    protected WolfObject() {
    }

}

好的,所以问题相对简单。

建造

package(default_visibility = ["//visibility:public"])

java_library(
    name = "networking_client",
    srcs = ["NetworkingClient.java"],
    data = [
        "//Network/Client:connection_configs",
        "//Network/Client:networking_client_so",
    ],
    deps = [
        "//Network/Client:networking_client_so",
        "//java/com/keiros/reactor/base:event_and_message",
        "//java/com/keiros/tools/general/strings:hex",
        "@com_google_protobuf//:protobuf_java",
        "@keiros_public//Network/Identity/Proto:ip_java_proto",
        "@keiros_public//Reactor/Proto/Event/Base:event_java_proto",
    ],
)

我所要做的就是从 deps 中删除"//Network/Client.networking_client_so",因为它导致 bazel 覆盖 LD_LIBRARY_PATH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM