Posted March 04, 2020
high rated
I ran into some problems when trying to run the games on a more recent distribution, but figured out a way to work around those and thought I might share it here. The first issue I encountered was the game crashing when using wayland (and the game tries to use Xwayland):
'JourneyDown1' terminated by signal SIGSEGV
Backtrace:
#0 updateKeyCodeLUT () at /home/toddy/Gobby/Common/glfw-3.0.4/src/x11_init.c:236
#1 initExtensions () at /home/toddy/Gobby/Common/glfw-3.0.4/src/x11_init.c:515
#2 _glfwPlatformInit () at /home/toddy/Gobby/Common/glfw-3.0.4/src/x11_init.c:653
#3 0x081e388e in glfwInit () at /home/toddy/Gobby/Common/glfw-3.0.4/src/init.c:124
#4 0x0805979f in gobby::DesktopGLRenderer::init() ()
#5 0x0807638e in gobby::Core::start() ()
#6 0x080521b8 in main ()
The other issue was the game crashing with a bad cast in some logging function:
terminate called after throwing an instance of 'std::bad_cast'
what(): std::bad_cast
'JourneyDown1' terminated by signal SIGABRT
Backtrace:
#0 0xf7fd0ac9 in __kernel_vsyscall ()
#1 0xf7962566 in raise () from /lib/libc.so.6
#2 0xf794a3b5 in abort () from /lib/libc.so.6
#3 0x082a19d5 in __gnu_cxx::__verbose_terminate_handler() ()
#4 0x08205ea3 in __cxxabiv1::__terminate(void (*)()) ()
#5 0x08205f1d in std::terminate() ()
#6 0x08203260 in __cxa_throw ()
#7 0x08293586 in std::__throw_bad_cast() ()
#8 0x0806c963 in gobby::DesktopLog::log(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#9 0x08056c98 in gobby::DesktopGLRenderer::resizeCallback(GLFWwindow*, int, int) ()
#10 0x08059e9d in gobby::DesktopGLRenderer::init() ()
#11 0x0807638e in gobby::Core::start() ()
#12 0x080521b8 in main ()
And here is my solution to these two issues. Save the following as "tjd_fixes.cpp" and compile it using "g++ -m32 -shared -D_GLIBCXX_USE_CXX11_ABI=1 tjd_fixes.cpp -o tjd_fixes.so". Then run the game with "env LD_PRELOAD=./tjd_fixes.so ./JourneyDown1".
// Needed to prevent a crash in DesktopLog::log()
#include <iostream>
// Fix crash when running under xwayland
// based on https://github.com/glfw/glfw/commit/2d39dff84af0f51e5c11c3e9b953cd2e2af166ef
#define XkbUseCoreKbd 0x0100
#define XkbKeyNamesMask (1<<9)
extern "C" void *XkbGetMap(void *display, unsigned int which, unsigned int device_spec);
extern "C" int XkbGetNames(void *dpy, unsigned int which, void *Xkb);
extern "C" void *XkbGetKeyboard(void *display, unsigned int which, unsigned int device_spec) {
void *result = XkbGetMap(display, 0, XkbUseCoreKbd);
XkbGetNames(display, XkbKeyNamesMask, result);
return result;
}
extern "C" void XkbFreeKeyboard(void *xkb, unsigned int which, int free_all) {
return;
}
'JourneyDown1' terminated by signal SIGSEGV
Backtrace:
#0 updateKeyCodeLUT () at /home/toddy/Gobby/Common/glfw-3.0.4/src/x11_init.c:236
#1 initExtensions () at /home/toddy/Gobby/Common/glfw-3.0.4/src/x11_init.c:515
#2 _glfwPlatformInit () at /home/toddy/Gobby/Common/glfw-3.0.4/src/x11_init.c:653
#3 0x081e388e in glfwInit () at /home/toddy/Gobby/Common/glfw-3.0.4/src/init.c:124
#4 0x0805979f in gobby::DesktopGLRenderer::init() ()
#5 0x0807638e in gobby::Core::start() ()
#6 0x080521b8 in main ()
The other issue was the game crashing with a bad cast in some logging function:
terminate called after throwing an instance of 'std::bad_cast'
what(): std::bad_cast
'JourneyDown1' terminated by signal SIGABRT
Backtrace:
#0 0xf7fd0ac9 in __kernel_vsyscall ()
#1 0xf7962566 in raise () from /lib/libc.so.6
#2 0xf794a3b5 in abort () from /lib/libc.so.6
#3 0x082a19d5 in __gnu_cxx::__verbose_terminate_handler() ()
#4 0x08205ea3 in __cxxabiv1::__terminate(void (*)()) ()
#5 0x08205f1d in std::terminate() ()
#6 0x08203260 in __cxa_throw ()
#7 0x08293586 in std::__throw_bad_cast() ()
#8 0x0806c963 in gobby::DesktopLog::log(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#9 0x08056c98 in gobby::DesktopGLRenderer::resizeCallback(GLFWwindow*, int, int) ()
#10 0x08059e9d in gobby::DesktopGLRenderer::init() ()
#11 0x0807638e in gobby::Core::start() ()
#12 0x080521b8 in main ()
And here is my solution to these two issues. Save the following as "tjd_fixes.cpp" and compile it using "g++ -m32 -shared -D_GLIBCXX_USE_CXX11_ABI=1 tjd_fixes.cpp -o tjd_fixes.so". Then run the game with "env LD_PRELOAD=./tjd_fixes.so ./JourneyDown1".
// Needed to prevent a crash in DesktopLog::log()
#include <iostream>
// Fix crash when running under xwayland
// based on https://github.com/glfw/glfw/commit/2d39dff84af0f51e5c11c3e9b953cd2e2af166ef
#define XkbUseCoreKbd 0x0100
#define XkbKeyNamesMask (1<<9)
extern "C" void *XkbGetMap(void *display, unsigned int which, unsigned int device_spec);
extern "C" int XkbGetNames(void *dpy, unsigned int which, void *Xkb);
extern "C" void *XkbGetKeyboard(void *display, unsigned int which, unsigned int device_spec) {
void *result = XkbGetMap(display, 0, XkbUseCoreKbd);
XkbGetNames(display, XkbKeyNamesMask, result);
return result;
}
extern "C" void XkbFreeKeyboard(void *xkb, unsigned int which, int free_all) {
return;
}