skmp / reicast-emulator

Reicast was a multiplatform Sega Dreamcast emulator
https://reicast.emudev.org
Other
1.1k stars 345 forks source link

Reicast won't start on Armbian64 #1902

Open pepitomaraja opened 4 years ago

pepitomaraja commented 4 years ago

Hi guys, my system is a tv box with s905x cpu and 2 gb ram. I've installed armbian64 bionic 5.7.0 and everything work fine. I've installed reicast latest version from source but when I launch ./reicast.elf it print the following error:

Personality: 00000000 Updated personality: 00000000 Linux paging: 4096 00001000 00000FFF

Config dir is: /home/pepito/.config/reicast/ Data dir is: /home/pepito/.local/share/reicast/ GLX: Found 12 matching FB configs. GLX: Chosen visual ID = 0x21 Screen DPI is 96, size 0 x 0. Scaling by 1.00 CreateContext GLX: Open GL 4.3 not supported GLX: init OK OpenGL version: 3.1 Mesa 19.2.8 CreateContext Done CreateFontsTexture terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr: __pos (which is 1) > this->size() (which is 0) Aborted

How I can fix it?

skmp commented 4 years ago

Peculiar error. Can you get us a backtrace w/ GDB?

chanleyuu commented 3 years ago

I've been having a similar problem here's the backtrace I got

0 0x00007ffff7732641 in raise () from /lib64/libc.so.6

1 0x00007ffff771b538 in abort () from /lib64/libc.so.6

2 0x00007ffff7b30876 in ?? () from /usr/lib64/libstdc++.so.6

3 0x00007ffff7b3c0ec in ?? () from /usr/lib64/libstdc++.so.6

4 0x00007ffff7b3c157 in std::terminate() () from /usr/lib64/libstdc++.so.6

5 0x00007ffff7b3c409 in __cxa_throw () from /usr/lib64/libstdc++.so.6

6 0x00007ffff7b3331f in ?? () from /usr/lib64/libstdc++.so.6

7 0x000000000054f33f in std::string::_M_check (__s=0x119af64 "basic_string::substr", __pos=,

this=0x7fffffffda00) at /usr/include/c++/10/ext/atomicity.h:84

8 std::string::substr (n=18446744073709551615, pos=, this=0x7fffffffda00)

at /usr/include/c++/10/bits/basic_string.h:5736

9 gui_welcome (font64=0x1c3d7b0)

at /home/aquadoff/Desktop/reicast-emulator-r20.04/reicast/linux/../../libswirl/gui/gui_welcome.cpp:68

10 0x0000000000545e24 in GUIRenderer_impl::tryUIFrame (this=0x1c01970) at /usr/include/c++/10/bits/unique_ptr.h:421

11 GUIRenderer_impl::UIFrame (this=0x1c01970)

at /home/aquadoff/Desktop/reicast-emulator-r20.04/reicast/linux/../../libswirl/gui/gui_renderer.cpp:497

12 0x0000000000545721 in GUIRenderer_impl::UILoop (this=)

at /home/aquadoff/Desktop/reicast-emulator-r20.04/reicast/linux/../../libswirl/gui/gui_renderer.cpp:575

13 GUIRenderer_impl::UILoop (this=0x1c01970)

at /home/aquadoff/Desktop/reicast-emulator-r20.04/reicast/linux/../../libswirl/gui/gui_renderer.cpp:565

14 0x0000000000411f23 in main (argc=1, argv=0x7fffffffdc48)

at /home/aquadoff/Desktop/reicast-emulator-r20.04/reicast/linux/../../libswirl/linux-dist/main.cpp:456
skah-6 commented 3 years ago

As i understand, you are using a device with relatively limited capabilities, so you did not installed "git", and downloaded an archive file generated by the "Github" website directly via HTTP. ("Code", then "Download" buttons from the web interface.)

But you needed the "git" program while having downloaded the sources with it, because the build process retrieve the version string with the "git" program, and the "git" program retrieve it from the files generated while downloading trough it. These are missing requirements not mentioned in the "README.md" to the Linux building process.

I guess that when you start Reicast, the "substr" function call require at least one character, and Reicast can not find any version related acceptable string, so it return: __pos (which is 1) > this->size() (which is 0)

Size is 0. So it can't launch just because of one missing char related to the version string.

This thing can be located at STDOUT, at the very beginning of the "make" process under Linux... but everything could seem fine since the program can be compiled anyway.

As a workaround you can modify, properly, those lines from the "libswirl/core.mk" file:

$(VERSION_HEADER):
    echo "#define REICAST_VERSION \"`git describe --tags --always`\"" > $(VERSION_HEADER)
    echo "#define GIT_HASH \"`git rev-parse --short HEAD`\"" >> $(VERSION_HEADER)
    echo "#define BUILD_DATE \"`date '+%Y-%m-%d %H:%M:%S %Z'`\"" >> $(VERSION_HEADER)

to:

$(VERSION_HEADER):
    echo "#define REICAST_VERSION \"MyVersion\"" > $(VERSION_HEADER)
    echo "#define GIT_HASH \"aaaaaaaa\"" >> $(VERSION_HEADER)
    echo "#define BUILD_DATE \"`date '+%Y-%m-%d %H:%M:%S %Z'`\"" >> $(VERSION_HEADER)

I just modified the 2 lines from the middle.

I believe the leader of the project will agree to update this...

Thanks to him for every hours i spent on "De La Jet Set Radio"! But i don't like the WEBUI for security reasons and minimalism principles.

Hi guys, my system is a tv box with s905x cpu and 2 gb ram. I've installed armbian64 bionic 5.7.0 and everything work fine. I've installed reicast latest version from source but when I launch ./reicast.elf it print the following error:

Personality: 00000000 Updated personality: 00000000 Linux paging: 4096 00001000 00000FFF

Config dir is: /home/pepito/.config/reicast/ Data dir is: /home/pepito/.local/share/reicast/ GLX: Found 12 matching FB configs. GLX: Chosen visual ID = 0x21 Screen DPI is 96, size 0 x 0. Scaling by 1.00 CreateContext GLX: Open GL 4.3 not supported GLX: init OK OpenGL version: 3.1 Mesa 19.2.8 CreateContext Done CreateFontsTexture terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr: __pos (which is 1) > this->size() (which is 0) Aborted

How I can fix it?