java - JNI - 找不到 native 库

标签 java java-native-interface

我有一个 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 .

引用:https://developer.apple.com/library/mac/documentation/Java/Conceptual/Java14Development/05-CoreJavaAPIs/CoreJavaAPIs.html

关于java - JNI - 找不到 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999574/

相关文章:

android - Android jniLibs 文件夹是如何创建的?

java - 如何通过JNI分享进度更新?

java - 介绍屏幕中的 ArrayIndexOutOfBoundsException

java - 使用 java 在 JPA 中插入并获取作为 AM/PM 的时间查询

java - 如何在 Android 上使用 jni.h?

java - 将 JNI 与返回多个大小未预先确定的短 int 指针的 C 函数结合使用

c++ - 用我的应用程序打包一个 jre

java - 类型转换 long 以隐式 float 而不是缩小

java - 如何在java中打印完整的json http请求结果

java - Java中将一串数字转换为数组,其中每个数字都是不同的槽