FabricMC / fabric-loom

Gradle build system plugin used to automate the setup of a minecraft mod development environment.
MIT License
233 stars 201 forks source link

`java.lang.UnsatisfiedLinkError` on Mac OS for LWJGL 2 natives #955

Closed SpaceWalkerRS closed 10 months ago

SpaceWalkerRS commented 11 months ago

Fabric Loom 1.4.1 Fabric Loader 0.14.22

When setting up a development environment for Minecraft versions prior to 17w43a (which is the first version to use LWJGL 3), running the game results in a crash due to the following error:

Minecraft has crashed!
net.fabricmc.loader.impl.FormattedException: java.lang.UnsatisfiedLinkError: Can't load library: <project root>/.gradle/loom-cache/natives/1.7.2/liblwjgl.dylib
    at net.fabricmc.loader.impl.FormattedException.ofLocalized(FormattedException.java:63) ~[fabric-loader-0.14.22.jar:?]
    at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470) ~[fabric-loader-0.14.22.jar:?]
    at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.14.22.jar:?]
    at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) [fabric-loader-0.14.22.jar:?]
    at net.fabricmc.devlaunchinjector.Main.main(Main.java:86) [dev-launch-injector-0.2.1+build.8.jar:?]
Caused by: java.lang.UnsatisfiedLinkError: Can't load library: <project root>/.gradle/loom-cache/natives/1.7.2/liblwjgl.dylib
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1831) ~[?:1.8.0_242]
    at java.lang.Runtime.load0(Runtime.java:810) ~[?:1.8.0_242]
    at java.lang.System.load(System.java:1088) ~[?:1.8.0_242]
    at org.lwjgl.Sys$1.run(Sys.java:70) ~[lwjgl-2.9.1-nightly-20131017.jar:?]
    at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_242]
    at org.lwjgl.Sys.doLoadLibrary(Sys.java:66) ~[lwjgl-2.9.1-nightly-20131017.jar:?]
    at org.lwjgl.Sys.loadLibrary(Sys.java:95) ~[lwjgl-2.9.1-nightly-20131017.jar:?]
    at org.lwjgl.Sys.<clinit>(Sys.java:112) ~[lwjgl-2.9.1-nightly-20131017.jar:?]
    at net.minecraft.client.Minecraft.getTime(Minecraft.java:2064) ~[minecraft-merged-c65ec6bb44-1.7.2-loom.mappings.1_7_2.layered+hash.630181723-v2.jar:?]
    at net.minecraft.client.main.Main.main(Main.java:36) ~[minecraft-merged-c65ec6bb44-1.7.2-loom.mappings.1_7_2.layered+hash.630181723-v2.jar:?]
    at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:468) ~[fabric-loader-0.14.22.jar:?]
    ... 3 more

I'm running Mac OS 12 (Monterey) on an Intel Mac. I get the same error if I run the game through ./gradlew runClient rather than through my IDE using the run configs Loom generated.

reproduction case

modmuss50 commented 11 months ago

Does the .gradle/loom-cache/natives/1.7.2/liblwjgl.dylib file exist?

Might also be worth looking in Settings, Privacy and Security to ensure that MacOS is not blocking the natives.

modmuss50 commented 11 months ago

After looking into this I can reproduce it, it seems that LWJGL is shipped as a .jnilib file, when it should be a .dylib.

Looking at MultiMC it renames the file: https://github.com/MultiMC/Launcher/blob/7450faaf1355af566515b9a156c704c6cd9a21ff/launcher/minecraft/launch/ExtractNatives.cpp#L65-L68 I will do the same.