【问题标题】:Java Library Path - UnsatisfiedLinkError on MacJava 库路径 - Mac 上的 UnsatisfiedLinkError
【发布时间】:2018-11-07 00:26:05
【问题描述】:

我知道,这不是第一个库路径问题,但我真的不知道问题是什么。 我的项目需要一个KernelWrapper 库,在Linux 上包含它完全没有问题。 但是,当我尝试将它包含在 Mac 中(通过终端或直接在 IDE 中)时,我总是得到 ​​p>

Exception in thread "main" java.lang.UnsatisfiedLinkError: no KernelWrapper in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at cTools.KernelWrapper.<clinit>(KernelWrapper.java:6)
at shell.main(shell.java:18)

我使用

打印出库路径
System.out.println(System.getProperty("java.library.path"));

它告诉我文件夹的路径是正确的并且包含在内。然而,KernelWrapper 类不知何故不能正常工作。但它与 Unix 中包含的文件夹完全相同。 我错过了什么?

【问题讨论】:

  • 你有Mac的KernelWrapper.dylib吗?
  • 否定。我有这个自制的 KernelWrapper 库,它是一种 Java-C-Library 文件夹,它将内核命令从 C 映射到 Java 方法。在 Unix 下的 Build-Path 中包含这个文件夹就足够了。除此之外,Mac 还需要什么吗?
  • 不,这还不够。您必须为 Mac 编译/链接您的代码,以便让作为本机应用程序的 Java 虚拟机加载和使用本机二进制代码。

标签: java macos unix library-path


【解决方案1】:

当应用程序尝试加载本机库(如 Linux 中的 .so、Windows 中的 .dll 或 Mac 中的 .dylib(在您的情况下))并且该库不存在时,将引发 UnsatisfiedLinkError。具体来说,为了找到所需的本地库,JVM 会同时查看 PATH 环境变量和 java.library.path 系统属性。

首先,您必须验证 System.loadLibrary 方法中传递的参数是否正确以及 该库确实存在。请注意,不需要扩展库。因此,如果您的库名为 SampleLibrary.dll,则必须将 SampleLibrary 值作为参数传递。 此外,如果您的应用程序已经加载了该库并且应用程序尝试再次加载它,JVM 将抛出 UnsatisfiedLinkError。此外,您必须验证本机库是否存在于 java.library.path 或应用程序的 PATH 环境库中。如果仍然找不到库,请尝试提供 System.loadLibrary 方法的绝对路径。 为了执行您的应用程序,请使用 -Djava.library.path 参数来明确指定本机库。例如,使用终端(Linux 或 Mac)或命令提示符 (Windows),通过发出以下命令来执行您的应用程序:

java -Djava.library.path= "<path_of_your_application>" –jar <ApplicationJAR.jar>

【讨论】:

  • 啊,好吧!所以我包含的 libKernelWrapper.so 不适合 Mac,我猜这是我现在的主要问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
相关资源
最近更新 更多