我有一个C ++本机库的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
那为什么我不能加载库?
答案 0 :(得分:1)
将.so文件放在jni / libs文件夹中。如果您有多个平台的库,则需要为每个平台创建一个文件夹并放置相应的文件。例如,jni / libs / x86将具有为x86平台构建的.so文件。如果您使用的是Android Studio,则与此略有不同。
答案 1 :(得分:1)
在Mac OS X上,JDK不会搜索以.so
结尾的文件或.dylib
或.jnilib
以外的任何文件的路径。我们需要确保本地库的文件名以.dylib
或.jnilib
结尾。