Mac M1设备IntelliJ运行OpenGL项目报GLFW_PLATFORM_ERROR如何解决
M1系列Mac运行LWJGL游戏项目GLFW_PLATFORM_ERROR解决方案
错误现象
[LWJGL] GLFW_PLATFORM_ERROR error
Description : Cocoa: Failed to find service port for display
Stacktrace :
org.lwjgl.glfw.GLFW.glfwInit(GLFW.java:830)
jade.Window.init(Window.java:44)
jade.Window.run(Window.java:35)
Main.main(Main.java:6)
核心原因
M1系列芯片的Mac原生不提供OpenGL驱动,仅通过Metal转译层支持OpenGL接口,旧版LWJGL绑定的GLFW库未适配Apple Silicon架构,且Homebrew安装的系统级GLFW默认不会被项目内置的LWJGL依赖直接调用,因此会出现初始化失败的问题。
解决方案
步骤1:升级LWJGL到适配Apple Silicon的版本
优先将项目依赖的LWJGL版本升级到3.3.0及以上,该版本开始原生支持arm64架构,无需转译即可调用系统GLFW和OpenGL转译层。如果使用Maven/Gradle管理依赖,需要明确为lwjgl-glfw依赖指定natives-macos-arm64分类器,拉取适配M1芯片的原生绑定库。步骤2:指定项目调用Homebrew安装的GLFW
打开IntelliJ对应项目的运行配置,在「VM选项」栏添加如下参数:
M1版Homebrew默认安装路径为-Dorg.lwjgl.glfw.libname=/opt/homebrew/lib/libglfw.dylib/opt/homebrew,如果自定义过安装路径或者使用Intel版Homebrew,替换为实际的libglfw.dylib文件路径即可。步骤3:调整IDE运行架构(适配旧版本LWJGL)
如果项目无法升级LWJGL版本,必须使用3.3.0以下的版本,右键IntelliJ.app选择「显示简介」,勾选「使用Rosetta打开」,强制IDE运行在x86转译模式下,匹配旧版LWJGL的x86原生绑定库。步骤4:强制指定系统OpenGL转译层
如果调整后仍然报OpenGL相关错误,在VM选项中额外添加如下参数:
强制项目调用系统内置的OpenGL转译层,避免依赖加载失败。-Dorg.lwjgl.opengl.libname=/System/Library/Frameworks/OpenGL.framework/OpenGL
内容的提问来源于stack exchange,提问作者Rehan Samaratunga
相关产品推荐
相关产品推荐

