Ancurio / mkxp

Free Software implementation of the Ruby Game Scripting System (RGSS)
GNU General Public License v2.0
509 stars 128 forks source link

Successful Compilation that run RGSS 1 and 2 games only! #211

Closed edwinacunav closed 5 years ago

edwinacunav commented 5 years ago

This is the shell script I use to start the compilation, cmake included of course.

#!/bin/bash mkdir build cd build cmake -DBOOST_INCLUDEDIR=$BOOST_I -DBOOST_LIBRARYDIR=$BOOST_L .. make

I don't get any warnings nor errors during cmake processing or the actual compilation process. Instead I only get the usual messages.

$ ./do.sh -- The C compiler identification is GNU 7.3.0 -- The CXX compiler identification is GNU 7.3.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") -- Checking for module 'sigc++-2.0' -- Found sigc++-2.0, version 2.10.0 -- Checking for module 'pixman-1' -- Found pixman-1, version 0.34.0 -- Checking for module 'physfs>=2.1' -- Found physfs, version 3.0.1 -- Checking for module 'vorbisfile' -- Found vorbisfile, version 1.3.5 -- Checking for module 'sdl2' -- Found sdl2, version 2.0.8 -- Checking for module 'SDL2_ttf' -- Found SDL2_ttf, version 2.0.14 -- Checking for module 'SDL2_image' -- Found SDL2_image, version 2.0.3 -- Checking for module 'SDL_sound' -- Found SDL_sound, version 1.0.1 -- Boost version: 1.65.1 -- Found the following Boost libraries: -- program_options -- Found OpenAL: /usr/lib/x86_64-linux-gnu/libopenal.so -- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11") -- Checking for module 'ruby-2.5' -- Found ruby-2.5, version 2.5.0 -- Configuring done -- Generating done -- Build files have been written to: /home/user/mkxp/build ... [100%] Linking CXX executable mkxp.bin.x86_64 [100%] Built target mkxp

RGSS 1 and 2 based games run smoothly. RGSS 3 games failed automatically.

If you click on the binary executable nothing happens. The following message appears right after you try running it on a terminal session.

$ ./mkxp.bin ./mkxp.bin: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory

Running on Kubuntu 18.04 bionic...

edwinacunav commented 5 years ago

This is what the disassemble _exit command tells me concerning this weird issue: (gdb) disassemble _exit Dump of assembler code for function __GI__exit: 0x00007ffff7df2030 <+0>: mov %edi,%edx 0x00007ffff7df2032 <+2>: mov $0xe7,%r8d 0x00007ffff7df2038 <+8>: mov $0x3c,%esi 0x00007ffff7df203d <+13>: jmp 0x7ffff7df204f <__GI__exit+31> 0x00007ffff7df203f <+15>: nop 0x00007ffff7df2040 <+16>: mov %edx,%edi 0x00007ffff7df2042 <+18>: mov %esi,%eax 0x00007ffff7df2044 <+20>: syscall 0x00007ffff7df2046 <+22>: cmp $0xfffffffffffff000,%rax 0x00007ffff7df204c <+28>: ja 0x7ffff7df2070 <__GI__exit+64> 0x00007ffff7df204e <+30>: hlt 0x00007ffff7df204f <+31>: mov %edx,%edi 0x00007ffff7df2051 <+33>: mov %r8d,%eax 0x00007ffff7df2054 <+36>: syscall 0x00007ffff7df2056 <+38>: cmp $0xfffffffffffff000,%rax 0x00007ffff7df205c <+44>: jbe 0x7ffff7df2040 <__GI__exit+16> 0x00007ffff7df205e <+46>: neg %eax 0x00007ffff7df2060 <+48>: mov %eax,0x20c0ba(%rip) # 0x7ffff7ffe120 <rtld_errno> 0x00007ffff7df2066 <+54>: jmp 0x7ffff7df2040 <__GI__exit+16> 0x00007ffff7df2068 <+56>: nopl 0x0(%rax,%rax,1) 0x00007ffff7df2070 <+64>: neg %eax 0x00007ffff7df2072 <+66>: mov %eax,0x20c0a8(%rip) # 0x7ffff7ffe120 <rtld_errno> 0x00007ffff7df2078 <+72>: jmp 0x7ffff7df204e <__GI__exit+30> End of assembler dump.

After setting a few options this is what I got from GDB:

(gdb) catch syscall exit exit_group Catchpoint 1 (syscalls 'exit' [60] 'exit_group' [231]) (gdb) run Starting program: /home/edwin/workspace/MKXP/Gem/mkxp.bin /home/user/workspace/MKXP/Gem/mkxp.bin: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory Catchpoint 1 (call to syscall exit_group), 0x00007ffff7df2056 in __GI__exit (status=status@entry=127) at ../sysdeps/unix/sysv/linux/_exit.c:31 31 ../sysdeps/unix/sysv/linux/_exit.c: No such file or directory. (gdb)

carstene1ns commented 5 years ago

No idea why you need gdb here. The error clearly states that there is a library which cannot be loaded. I would check SDL2_image, as it should be the one linked to libjpeg.

RGSS 1 and 2 based games run smoothly. RGSS 3 games failed automatically.

When there is a library missing, there is no way the executable works. So do you actually have more than one executable?

Also, not quite sure what is the intention of mkxpplus project, why not contribute your "working" changes back to mkxp instead?

Ancurio commented 5 years ago

libjpeg.so.62

That's the version included in the depkit. You need to keep LD_LIBRARY_PATH to the lib/ folder there in order to start binaries compiled with it (source buildenv.sh should do that)

edwinacunav commented 5 years ago

I it really that easy, carstene1ns? I wish it did, still, it's not really the case here. You say it's just a matter of finding that version of libjpeg, but that isn't true. RGSS1 and 2 would fail as well, not just version 3. I never compiled it against an old version of that library so it shouldn't be looking for it in the first place. I can only suspect two things here. Either the mkxp still includes some old reference or requirement in its code or Ancurio's SDL_sound fork does and it's causing a conflict here. Again nothing said so far explains why VX Ace games with RGSS3 are the only games that fail there. I am using a single executable that I have copied and pasted in each individual directory.

OK, I can see there's another response. Regarding the deposit and can only say it never worked in my case and that's why I have opened a separate issue. I had to drop it and use libraries installed in my system. Since I was able to advance further this time, I don't see the point in using a method that failed already and was quite outdated... I'm sorry to say that, but I really needed to do something different to make it work with RGSS1 and 2 so far...

carstene1ns commented 5 years ago

@edwinacunav Sorry, but what you write here is really confusing. The build you have does clearly not work, because of a missing library, yet you tell us only RGSS3 games fail. So you must have changed something (for example changed paths or missing a copied library).

Also, maybe you do not fully understand the concept of dynamic linking, so let me clear that up. mkxp is linked to SDL2_image, which then links against libjpeg. So this is not a problem of the mkxp executable, but of the dependency kit (i.e. setting an appropriate RPATH).

We have successfully built mkxp on multiple platforms, so it clearly works. However, there might be problems in your local development setup that prevent it. You said that you used system libraries, yet now it fails in the dependency kit, try clearing the cache and stick to one method.

edwinacunav commented 5 years ago

Thanks for the remainder but I did not need it because I knew that since I had started working with somebody else's SDL based project a couple of years ago. :D I am not using the dependency kit because it didn't work with the outdated dependencies. Perhaps I could try the updated version Ancurio uploaded not long ago. I really planned to stick to one method, the one requiring installed libraries instead of the dependency kit. XD So if anybody can give me any hint on where to find any libjpeg.so.62 leftover found in the default source files, excluding the dependency kit, and the SDL_sound fork and the CMakeLists.txt file, I would really appreciate it.

carstene1ns commented 5 years ago

Good luck then. Unsubscribing.

edwinacunav commented 5 years ago

It's not that I just picked libjpeg8 as anybody, including your badass servitor here XD, would have first thought. After checking the dependencies it seems my SDL2_image package on *Ubuntu does require that version of the library instead of libjpeg62 with all of its free stuff goodies. :S Even so it seems the SDL_sound patch asks me to install libjpeg62 even if it never gets linked to by my binary executable. The executable does run my games and test games smoothly just as expected. :O What a weird situation!