Skip to content

Instantly share code, notes, and snippets.

@moaxcp
Last active August 21, 2021 16:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moaxcp/2410aafb4b67733676d74e8bf6d0a96b to your computer and use it in GitHub Desktop.
Save moaxcp/2410aafb4b67733676d74e8bf6d0a96b to your computer and use it in GitHub Desktop.

building minecraft mods on nixos

After following https://fabricmc.net/ and building on nixos I get this error

---- Minecraft Crash Report ----
// Why is it breaking :(

Time: 8/2/19 9:06 PM
Description: Initializing game

java.lang.ExceptionInInitializerError
	at net.minecraft.client.options.GameOptions.<init>(GameOptions.java:213)
	at net.minecraft.client.MinecraftClient.init(MinecraftClient.java:416)
	at net.minecraft.client.MinecraftClient.start(MinecraftClient.java:368)
	at net.minecraft.client.main.Main.main(Main.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:170)
	at net.fabricmc.loader.launch.knot.Knot.init(Knot.java:129)
	at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:26)
Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Failed to dynamically load library: /tmp/lwjgljohn/3.2.2-build-10/libglfw.so(error = null)
	at net.minecraft.client.util.InputUtil.<clinit>(InputUtil.java:109)
	... 11 more
Caused by: java.lang.UnsatisfiedLinkError: Failed to dynamically load library: /tmp/lwjgljohn/3.2.2-build-10/libglfw.so(error = null)
	at org.lwjgl.system.linux.LinuxLibrary.loadLibrary(LinuxLibrary.java:32)
	at org.lwjgl.system.linux.LinuxLibrary.<init>(LinuxLibrary.java:19)
	at org.lwjgl.system.APIUtil.apiCreateLibrary(APIUtil.java:123)
	at org.lwjgl.system.Library.loadNative(Library.java:335)
	at org.lwjgl.system.Library.loadNativeFromLibraryPath(Library.java:324)
	at org.lwjgl.system.Library.loadNative(Library.java:239)
	at org.lwjgl.system.Library.loadNative(Library.java:205)
	at org.lwjgl.glfw.GLFW.<clinit>(GLFW.java:674)
	at sun.misc.Unsafe.ensureClassInitialized(Native Method)
	at java.lang.invoke.DirectMethodHandle$EnsureInitialized.computeValue(DirectMethodHandle.java:317)
	at java.lang.invoke.DirectMethodHandle$EnsureInitialized.computeValue(DirectMethodHandle.java:314)
	at java.lang.ClassValue.getFromHashMap(ClassValue.java:227)
	at java.lang.ClassValue.getFromBackup(ClassValue.java:209)
	at java.lang.ClassValue.get(ClassValue.java:115)
	at java.lang.invoke.DirectMethodHandle.checkInitialized(DirectMethodHandle.java:338)
	at java.lang.invoke.DirectMethodHandle.ensureInitialized(DirectMethodHandle.java:328)
	at java.lang.invoke.DirectMethodHandle.ensureInitialized(DirectMethodHandle.java:360)
	at net.minecraft.client.util.InputUtil.<clinit>(InputUtil.java:106)
	... 11 more


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Client thread
Stacktrace:
	at net.minecraft.client.options.GameOptions.<init>(GameOptions.java:213)
	at net.minecraft.client.MinecraftClient.init(MinecraftClient.java:416)

-- Initialization --
Details:
Stacktrace:
	at net.minecraft.client.MinecraftClient.start(MinecraftClient.java:368)
	at net.minecraft.client.main.Main.main(Main.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:170)
	at net.fabricmc.loader.launch.knot.Knot.init(Knot.java:129)
	at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:26)

-- System Details --
Details:
	Minecraft Version: 1.14.4
	Minecraft Version ID: 1.14.4
	Operating System: Linux (amd64) version 4.19.63
	Java Version: 1.8.0_152-release, JetBrains s.r.o
	Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), JetBrains s.r.o
	Memory: 424937848 bytes (405 MB) / 1224736768 bytes (1168 MB) up to 3730309120 bytes (3557 MB)
	CPUs: 8
	JVM Flags: 0 total;
	Fabric Mods:
		fabric: Fabric API 0.3.0+build.207
		fabric-api-base: fabric-api-base 0.1.0+b494ebeb42
		fabric-biomes-v1: fabric-biomes-v1 0.1.0+896c7fbb42
		fabric-commands-v0: fabric-commands-v0 0.1.1+b494ebeb42
		fabric-containers-v0: fabric-containers-v0 0.1.2+b494ebeb42
		fabric-content-registries-v0: fabric-content-registries-v0 0.1.1+b494ebeb42
		fabric-crash-report-info-v1: fabric-crash-report-info-v1 0.1.0+5914746342
		fabric-events-interaction-v0: fabric-events-interaction-v0 0.1.0+ea100f6142
		fabric-events-lifecycle-v0: fabric-events-lifecycle-v0 0.1.0+5914746342
		fabric-item-groups-v0: fabric-item-groups-v0 0.1.0+1e69a0a542
		fabric-keybindings-v0: fabric-keybindings-v0 0.1.1+7dfef87c42
		fabric-loot-tables-v1: fabric-loot-tables-v1 0.1.0+b494ebeb42
		fabric-mining-levels-v0: fabric-mining-levels-v0 0.1.0+ab421b9c42
		fabric-models-v0: fabric-models-v0 0.1.0+5914746342
		fabric-networking-blockentity-v0: fabric-networking-blockentity-v0 0.1.1+b494ebeb42
		fabric-networking-v0: fabric-networking-v0 0.1.2+9b03381f42
		fabric-object-builders-v0: fabric-object-builders-v0 0.1.1+9b03381f42
		fabric-registry-sync-v0: fabric-registry-sync-v0 0.2.2+9b03381f42
		fabric-renderer-api-v1: fabric-renderer-api-v1 0.1.1+9b03381f42
		fabric-renderer-indigo: fabric-renderer-indigo 0.1.9+9b03381f42
		fabric-rendering-data-attachment-v1: fabric-rendering-data-attachment-v1 0.1.0+b494ebeb42
		fabric-rendering-fluids-v1: fabric-rendering-fluids-v1 0.1.0+dc4c57c242
		fabric-rendering-v0: fabric-rendering-v0 0.1.1+6dad974e42
		fabric-resource-loader-v0: fabric-resource-loader-v0 0.1.1+7495ea2842
		fabric-tag-extensions-v0: fabric-tag-extensions-v0 0.1.1+b494ebeb42
		fabric-textures-v0: fabric-textures-v0 0.1.4+b494ebeb42
		fabricloader: Fabric Loader 0.4.8+build.159
		modid: Example Mod 1.0.0
	Launched Version: Fabric
	LWJGL: 3.2.2 build 10
	OpenGL: ~~ERROR~~ NoClassDefFoundError: Could not initialize class org.lwjgl.glfw.GLFW
	GL Caps:
	Using VBOs: Yes
	Is Modded: Definitely; Client brand changed to 'fabric'
	Type: Client (map_client.txt)
	Resource Packs: ~~ERROR~~ NullPointerException: null
	Current Language: ~~ERROR~~ NullPointerException: null
	CPU: <unknown>

The main issue is here

Caused by: java.lang.UnsatisfiedLinkError: Failed to dynamically load library: /tmp/lwjgljohn/3.2.2-build-10/libglfw.so(error = null)

observations native library

As with many native libraries on nixos this requires a patch so the lib points to the correct locations installed on the os.

This is done in nixos using https://nixos.org/patchelf.html

looking at the package there is no patchelf being done. The package brings in some libraries but only for running old versions of minecraft.

lwjgl

The error indicates a problem with lwjgl https://www.lwjgl.org/guide It might make sense to try running the getting started code in a gradle project and see how nixos acts with it.

In the stack trace there is

Caused by: java.lang.UnsatisfiedLinkError: Failed to dynamically load library: /tmp/lwjgljohn/3.2.2-build-10/libglfw.so(error = null)
	at org.lwjgl.system.linux.LinuxLibrary.loadLibrary(LinuxLibrary.java:32)
	at org.lwjgl.system.linux.LinuxLibrary.<init>(LinuxLibrary.java:19)
	at org.lwjgl.system.APIUtil.apiCreateLibrary(APIUtil.java:123)
	at org.lwjgl.system.Library.loadNative(Library.java:335)
	at org.lwjgl.system.Library.loadNativeFromLibraryPath(Library.java:324)
	at org.lwjgl.system.Library.loadNative(Library.java:239)
	at org.lwjgl.system.Library.loadNative(Library.java:205)
	at org.lwjgl.glfw.GLFW.<clinit>(GLFW.java:674)

First GLFW needs to load the native library. It looks like loadNativeFromLibraryPath is called but it can’t find it. It calls apiCreateLibrary which puts the .so file in a tmp dir. Then the .so file is used. It may be possible to make a nix expression for libglfw.so and put it on LD_LIBRARY_PATH for this build.

It provides a GAME_LIBRARY_PATH which adds opengl and other libraries for the game. This may be the key to fixing this isue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment