Posted December 18, 2020
Having just purchased The Way was getting the following crash;
Controllers: added manager for application, 1 managers active
Found controller: logitech logitech extreme 3d
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.UnsatisfiedLinkError: /tmp/steamworks4j/209f2351/libsteam_api64.so: /tmp/steamworks4j/209f2351/libsteam_api64.so: failed to map segment from shared object
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131)
Caused by: java.lang.UnsatisfiedLinkError: /tmp/steamworks4j/209f2351/libsteam_api64.so: /tmp/steamworks4j/209f2351/libsteam_api64.so: failed to map segment from shared object
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
at com.codedisaster.steamworks.SteamSharedLibraryLoader.loadLibraries(SteamSharedLibraryLoader.java:77)
at com.codedisaster.steamworks.SteamSharedLibraryLoader.extractAndLoadLibraries(SteamSharedLibraryLoader.java:188 )
at com.codedisaster.steamworks.SteamAPI.init(SteamAPI.java:14)
at com.codedisaster.steamworks.SteamAPI.init(SteamAPI.java:8)
at com.ac.theway.managers.SteamManager.steamInit(SteamManager.java:168)
at com.ac.theway.TheWay.create(TheWay.java:315)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Which was due to noexec permissions on /tmp mount per standard security hardening (though more applicable on servers than desktop). Solution is to change the temporary directory used by Java, either passing -Djava.io.tmpdir=/var/tmp to Java or setting environment variable _JAVA_OPTIONS=-Djava.io.tmpdir=/var/tmp.
Edited the start.sh script to essentially just the following;
#!/bin/bash
TMPDIR=/var/tmp
cd `dirname $0`
cd game/x64
export _JAVA_OPTIONS=-Djava.io.tmpdir=$TMPDIR
./TheWay
Controllers: added manager for application, 1 managers active
Found controller: logitech logitech extreme 3d
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.UnsatisfiedLinkError: /tmp/steamworks4j/209f2351/libsteam_api64.so: /tmp/steamworks4j/209f2351/libsteam_api64.so: failed to map segment from shared object
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131)
Caused by: java.lang.UnsatisfiedLinkError: /tmp/steamworks4j/209f2351/libsteam_api64.so: /tmp/steamworks4j/209f2351/libsteam_api64.so: failed to map segment from shared object
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
at java.lang.Runtime.load0(Runtime.java:809)
at java.lang.System.load(System.java:1086)
at com.codedisaster.steamworks.SteamSharedLibraryLoader.loadLibraries(SteamSharedLibraryLoader.java:77)
at com.codedisaster.steamworks.SteamSharedLibraryLoader.extractAndLoadLibraries(SteamSharedLibraryLoader.java:188 )
at com.codedisaster.steamworks.SteamAPI.init(SteamAPI.java:14)
at com.codedisaster.steamworks.SteamAPI.init(SteamAPI.java:8)
at com.ac.theway.managers.SteamManager.steamInit(SteamManager.java:168)
at com.ac.theway.TheWay.create(TheWay.java:315)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Which was due to noexec permissions on /tmp mount per standard security hardening (though more applicable on servers than desktop). Solution is to change the temporary directory used by Java, either passing -Djava.io.tmpdir=/var/tmp to Java or setting environment variable _JAVA_OPTIONS=-Djava.io.tmpdir=/var/tmp.
Edited the start.sh script to essentially just the following;
#!/bin/bash
TMPDIR=/var/tmp
cd `dirname $0`
cd game/x64
export _JAVA_OPTIONS=-Djava.io.tmpdir=$TMPDIR
./TheWay