在Mac OS X上加载JNI lib?

时间:2010-03-31 04:52:56

标签: java macos java-native-interface jogl

背景

所以我试图在运行时在Mac OS X上将jnilib(特别是JOGL)加载到Java中。我一直在关注相关的Stack Overflow问题:

我的最终目标是将特定于平台的JOGL文件打包到JAR中,并将它们解压缩到临时目录中并在启动时加载它们。我回过头来尝试使用硬编码路径加载JOGL:

    File f = new File("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl.jnilib");
    System.load(f.toString());
    f = new File ("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl_awt.jnilib");
    System.load(f.toString());

尝试使用JOGL API时出现以下异常:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path

但是当我通过添加以下JVM选项指定java.library.path时:

    -Djava.library.path="/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/" 

一切正常。


问题

是否可以在Mac OS X上使用System.load(或其他一些变体)来替代在运行时调用的-Djava.library.path?

3 个答案:

答案 0 :(得分:2)

您无需在启动时提供java.library.path。您可以使用

以编程方式进行设置
System.setProperty("java.library.path", "/var/folder/bla/foo/bar/");

我不知道System.load()如果没有这个库路径会以某种方式工作。

答案 1 :(得分:1)

Jogl总是尝试自动加载所有依赖库。 为避免这种情况,应该有一个NativeLibLoader类,您可以在通过System.load()

自己加载库之前调用disableLoading()。

答案 2 :(得分:-3)

System.load(...)将libraryName作为参数。它不会将路径作为参数。 JVM在-Djava.library.path;

中指定的路径列表中搜索具有指定名称的库

此处没有特定于Mac OS X.它在所有操作系统上以相同的方式搜索库。