在Mac OS X上加载JNI lib?

Cli*_*ton 6 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());
Run Code Online (Sandbox Code Playgroud)

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

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
Run Code Online (Sandbox Code Playgroud)

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

    -Djava.library.path="/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/" 
Run Code Online (Sandbox Code Playgroud)

一切正常.


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

小智 1

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