6

背景

所以我试图在运行时将 jnilib (特别是JOGL)加载到 Mac OS X 上的 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

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

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

一切正常。


问题

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

4

3 回答 3

2

您不必java.library.path在启动时提供。您可以以编程方式设置它

System.setProperty("java.library.path", "/var/folder/bla/foo/bar/");

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

于 2010-03-31T11:38:10.657 回答
1

Jogl always tries to auto-load all dependent libraries. To avoid this, there should be a NativeLibLoader class where you can call disableLoading() before you load the libraries yourself via the System.load()

于 2010-04-03T22:27:16.853 回答
-3

System.load(...)将 libraryName 作为参数。它不会将库路径作为参数。JVM 在指定的路径列表中搜索具有指定名称的库-Djava.library.path;

这里没有任何特定于 Mac OS X 的东西。它在所有操作系统上以相同的方式搜索库。

于 2010-03-31T07:50:44.713 回答