You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jextract与Foreign Function and Memory API操作OpenGL时遇链接错误求助

解决java.lang.UnsatisfiedLinkError: unresolved symbol: glutInit问题

你遇到的问题根源是加载了错误的系统库:glutInit是GLUT(OpenGL Utility Toolkit)库的专属函数,并不在libOpenGL.so中,必须加载GLUT对应的库文件才能解决。

步骤1:确认GLUT库已安装

Ubuntu上需要先安装GLUT的开发包,在终端执行:

sudo apt install freeglut3-dev

步骤2:加载正确的GLUT库

替换代码里的System.load调用,改为加载GLUT库:

  • 方式一:使用绝对路径加载(适合明确库位置的场景)
    System.load("/usr/lib/x86_64-linux-gnu/libglut.so.3");
    
  • 方式二:用System.loadLibrary自动查找(更简洁,无需绝对路径)
    System.loadLibrary("glut");
    

步骤3:调整库加载顺序(可选但推荐)

确保先加载OpenGL基础库,再加载GLUT,避免依赖顺序问题:

System.loadLibrary("GL");
System.loadLibrary("glut");

步骤4:验证jextract处理的头文件

确认jextract生成绑定代码时,已处理GLUT的头文件(比如glut.h),而不只是OpenGL的gl.h/glu.h。

修改后的完整示例代码

public class OpenGLLauncher {
    public static void main(String[] args) {
        // 加载依赖库
        System.loadLibrary("GL");
        System.loadLibrary("glut");

        try (var s = MemorySession.openConfined()) {
            MemorySegment arc = s.allocate(ValueLayout.JAVA_INT, 0);
            glutInit(arc, arc);
            glutInitDisplayMode(GLUT_SINGLE());
            glutInitWindowSize(400, 300);
            glutInitWindowPosition(100, 100);
            glutCreateWindow(s.allocateUtf8String("Hello World!"));
            MemorySegment callBack = allocate(OpenGLLauncher::displayMe, s);
            glutDisplayFunc(callBack);
            glutMainLoop();
        }
    }

    public static void displayMe() {
        // 在这里实现你的渲染逻辑
        // 例如:glClear(GL_COLOR_BUFFER_BIT);
    }
}

内容的提问来源于stack exchange,提问作者DoomArchitect

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:55:18