Game (PokeMMO) almost works


ryz0z

Still Fresh
Joined
May 30, 2014
Messages
11
PokeMMO is a game written primarily in Java, and executes fine on the Pandora, up until a point, where a method call fails. There is no source available from what I can tell, but maybe someone here can decipher the error thrown.

So, here's the error:

Java HotSpot Client VM warning: You have loaded library /media/FSD1/pandora/JavaApps/PokeMMO/lib/native/linux/liblwjgl.so which might have disabled stack guard. The VM will try to fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.

Exception in thread "main" java.lang.UnsatisfiedLinkError: /media/FSD1/pandora/JavaApps/PokeMMO/lib/native/linux/liblwjgl.so: /media/FSD1/pandora/JavaApps/PokeMMO/lib/native/linux/liblwjgl.so: cannot open shared object file: No suck file or directory (Possible cause: can't load IA 32-bit .so on a ARM-bit platform)

followed by a stacktrace beginning in java.lang.ClassLeadersNativeLibrary.load(Native Method)

To me it looks like the LightWeightJavaGameLibrary (lwjgl) doesn't work on ARM, but I have no idea what 'IA' is, or if one might be able to simulate it.

Game's website: http://pokemmo.eu/

LWJGL website: http://lwjgl.org/

Good luck, and thanks for any help :D

EDIT: I saw someone get Minecraft running on the Pandora, albeit slowly. AFAIK Minecraft uses LWJGL, so maybe this is more possible that I thought?
 
Last edited by a moderator:
PokeMMO is a game written primarily in Java, and executes fine on the Pandora, up until a point, where a method call fails. There is no source available from what I can tell, but maybe someone here can decipher the error thrown.

So, here's the error:

Java HotSpot Client VM warning: You have loaded library /media/FSD1/pandora/JavaApps/PokeMMO/lib/native/linux/liblwjgl.so which might have disabled stack guard. The VM will try to fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.

Exception in thread "main" java.lang.UnsatisfiedLinkError: /media/FSD1/pandora/JavaApps/PokeMMO/lib/native/linux/liblwjgl.so: /media/FSD1/pandora/JavaApps/PokeMMO/lib/native/linux/liblwjgl.so: cannot open shared object file: No suck file or directory (Possible cause: can't load IA 32-bit .so on a ARM-bit platform)

followed by a stacktrace beginning in java.lang.ClassLeadersNativeLibrary.load(Native Method)

To me it looks like the LightWeightJavaGameLibrary (lwjgl) doesn't work on ARM, but I have no idea what 'IA' is, or if one might be able to simulate it.

Game's website: http://pokemmo.eu/

LWJGL website: http://lwjgl.org/

Good luck, and thanks for any help :D

EDIT: I saw someone get Minecraft running on the Pandora, albeit slowly. AFAIK Minecraft uses LWJGL, so maybe this is more possible that I thought?
The error is "just" that it is trying to load the PC x86 version of lwjgl . I had the same issue with Minecraft and had to use so "cheat" in the loader to make it launchable on the Pandora.

So I guess it should be doable with this one too. LWJGL can work on ARM, no problem. It can even be compiled with GLES support (but the game using it has to be aware of that, so you'll probably need a standard LWGL and glshim here). Take a look at my Minecraft beta PND for the right libraries. If you are really stuck, I'll take a look at it later (but I don't want to register to that pokethingy site)...
 
Last edited by a moderator:
@ptitSeb Thanks a lot, I'll check that out and see if I can just swap out the libraries.

EDIT: Alright, I hate to ask, but where might I find a copy of your Minecraft PND? Its not on the repo, and the forum search is turning up nothing...

EDIT: Nevermind, found it buried in the Port Requests thread XD

EDIT: After replacing all the libraries I could find with those from the Minecraft PND, LWJGL is able to create an error dialogue with a new problem: libGL.so.1: cannot open shared object file: No such file or directory. Oddly enough, I couldn't find a file named libGL.so.1 in the game files. You don't have to make an account at all to dig through the files, you can download the portable application here: https://pokemmo.eu/download_file/?id=1&mirror=0
 
Last edited by a moderator:
LibGL.so.1 should be in the libfolder in pndroot.


Also you need to export the LD_LIBRARY_PATH to the location it is in in your launchscript before starting the program to make it aware that it is there.
 
@mcoit I haven't packaged the application as a PND yet, at the moment it's just a folder with a sh file at the root and lib/resource files in directories under it.

The sh file executes a single Java command: java -Xmx512M -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./lib/*:pokeMMO.exe com.pokeemu.client.Client

Oddly enough, it appears to be pulling the game's libraries from both the lib folder and the windows executable. However, the libs folder referenced in the third argument doesn't exist.
 
As said, if it misses libGL.so.1 unpack ptitsebts pn, copy the lib to the location your executable is and try to start like this:


LD_PRELOAD=./libGL.so.1 java -Xmx512M -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./lib/*:pokeMMO.exe com.pokeemu.client.Client

Have a look how the startupscript in ptitsebts pnd works.
 
Okay, with that in place, the game attempts to launch, goes into fullscreen mode, but the screen remains black. After a little while, it crashes. According to the terminal, glXGetProcAddress fails to find dozens of functions and lwjgl fails to set the display mode. Full output: http://pastebin.com/BTvLgqax

If I had to guess, I would say that the wrapper is not making a bunch of openGL functions visible to the program.
 
Okay, with that in place, the game attempts to launch, goes into fullscreen mode, but the screen remains black. After a little while, it crashes. According to the terminal, glXGetProcAddress fails to find dozens of functions and lwjgl fails to set the display mode. Full output: http://pastebin.com/BTvLgqax

If I had to guess, I would say that the wrapper is not making a bunch of openGL functions visible to the program.
Before "java", add LIBGL_FB=1 to your command line.
 
@ptitSeb Alright, done, though it doesn't seem to change anything.
 
That's possible, I'll check, but it's worth noting that for some reason the paste data left out a bunch of lines that look like this:

glGetProcAddress: glXCreatePixmap not found.

So I get the feeling that its still missing some libraries.

EDIT: This may be the cause:

Failed to load library: libjinput-linux64.so: wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch)
 
That's possible, I'll check, but it's worth noting that for some reason the paste data left out a bunch of lines that look like this:


glGetProcAddress: glXCreatePixmap not found.


So I get the feeling that its still missing some libraries.


EDIT: This may be the cause:


Failed to load library: libjinput-linux64.so: wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch)
yes, the glProcAdress warnings are probably not the cause.
but that input-linux64.so lib certainly is.


IIRC, you can find a working copy of it inside java.pnd.


or maybe you should use the java pnd method instead of the minecraft one. try to look at my Epic Inventor pnd.
 
I found libjinput-linux.so in the Java pnd, but not the 64 one. It looks like the libjinput-linux64.so file is specific to 64 bit x86 architecture, so I would need a copy of it modded to work on ARM. I don't even know if that is possible. I got the initial loading screen to work by replacing all of the lib files ending in 64 with copies of their non64 counterparts, but the program crashes quickly, no doubt due to missing functions in the non64 bit versions  of the libraries.

EDIT: I found a file called libXxf86vm.so.1 in the Java.pnd. Is that an x86 virtual machine? Might it be useful?

I looked through the EpicInventory pnd, but it looks like that just uses the libraries built into the java pnd.
 
Last edited by a moderator:
I found libjinput-linux.so in the Java pnd, but not the 64 one. It looks like the libjinput-linux64.so file is specific to 64 bit x86 architecture, so I would need a copy of it modded to work on ARM. I don't even know if that is possible. I got the initial loading screen to work by replacing all of the lib files ending in 64 with copies of their non64 counterparts, but the program crashes quickly, no doubt due to missing functions in the non64 bit versions  of the libraries.

EDIT: I found a file called libXxf86vm.so.1 in the Java.pnd. Is that an x86 virtual machine? Might it be useful?

I looked through the EpicInventory pnd, but it looks like that just uses the libraries built into the java pnd.
The game should pick the libjinput-linux.so automatically if avaliable. if it insist to pick the 64bits, well, just rename the file.

libXxf86vm is an X11 library. Don't let the name foul you, it's an ARM library (just historical reason for that naming).
 
Alright, I renamed the file, but it crashes shortly after booting (the first loading screen displays). I'm not sure what error causes it to crash, as the terminal closes for some reason. Is there some way to force a terminal to output to a log?
 
Back
Top