我有一个 C++ native 库的 JNI 包装器。当我尝试在 Java 代码中加载该库时,我看到以下异常:
java.lang.UnsatisfiedLinkError: no Foo in java.library.path
我像这样加载库:
System.loadLibrary("Foo");
我设置java.library.path如下:
java.library.path = /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/lib
我将 -XshowSettings:properties
添加到 JVM 选项,并确认 java.library.path 设置如上所示。
这是文件系统上的库 .so:
$ l /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/lib/libFoo.so
-rwxr-xr-x 1 root wheel 448K 29 Oct 14:23 /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/lib/libFoo.so
环境信息:
java.version = 1.7.0_40
os.arch = x86_64
os.name = Mac OS X
os.version = 10.10
那么为什么我无法加载该库?
最佳答案
在 Mac OS X 上,JDK 不会搜索以 .so
结尾的文件的路径。 ,或 .dylib
以外的任何内容或.jnilib
。我们需要确保 native 库的文件名以 .dylib
结尾或.jnilib
.
关于java - JNI - 找不到 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999574/