java - 在可运行的jar中使用jogl,手动加载dll

标签 java dll jogl executable-jar

我正在使用 jogl 库在我的程序中制作漂亮的 3D 绘图。为了在可运行的 jar 中使用它,我使用众所周知的技巧将 dll 从中复制出来并将其放在临时位置(有关详细信息,请参阅 this question ,以及下面提到的 loadLib 函数)

问题是我不断收到不满意的链接错误:

static {
        mylogger().info("Loading jogl DLL");

        // we need to put both DLLs to temp dir
        String path = "MYAPP_" + new Date().getTime();
        try {
            loadLib(path, "gluegen-rt");
            loadLib(path, "jogl");
            loadLib(path, "jogl_cg");
            loadLib(path, "jogl_awt");
            libraryLoaded = true;
        } catch(UnsatisfiedLinkError e) {
            mylogger().error("Cannot load JOGL libraries: "+e.getMessage());
        }
}

那么,所包含的库的顺序是否有问题?如何找出链接不满足错误的原因?

最佳答案

如果您使用 JogAmp“Fat-Jar”布局,那么 JOGL 和 Gluegen 将从您的可运行 jar 中查找并加载 native 库。

在 jar 中使用以下布局:

 /natives/<os.and.arch>/libLala1.so
 /natives/<os.and.arch>/libLala2.so

https://jogamp.org/wiki/index.php/JogAmp_JAR_File_Handling#Custom_Bundling

关于java - 在可运行的jar中使用jogl,手动加载dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5966221/

相关文章:

java - 为什么 "GLProfile.GetDefault()"在 NetBeans 中运行时有效,但在运行 Jar 时无效

java - 如何在java中为准备好的语句添加密码

windows - 如何使用 CMake 生成 Windows DLL 版本控制信息?

java - 为什么我在 MacOSX 上缺少/System/Library/Frameworks/JavaVM.framework/Libraries/libjawt.dylib?

linux - Golang,在Linux中加载Windows DLL

java - 使用非 Aqua 外观时,OS X 上的工具提示隐藏在 JOGL GLCanvas 后面

Java 列表泛型具有多个边界

java - Android:Firebase登录失败密码无效或用户没有密码

Java 游戏板数组未更新