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/26658072/

相关文章:

java - 如何将 Java 空参数传递给使用 JNA 编译为 C 代码的 native 方法?

android - 为 android 编译 C 库,但未找到符号

c++ - 如何在JNI中将java异常作为jobobject抛出

java - JDBI支持不带out参数的存储过程

作为 Eclipse View 的 Java 源代码编辑器

java - 没有轮询概念的java中的聊天应用程序

java - 在 JNI 中,如何从 native 代码访问静态 Java 变量

java - downloadUrl 在 firebase 存储中变为 com.google.android.gms.tasks.zzu@5f9a842

java - Quartz 2.2.3 JobStore 属性被默认设置覆盖 - Spring Boot、Liquibase、Oracle

android - 作为系统应用程序制作时,应用程序在启动时崩溃