[英]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.