qtubuntumarble

Error: Map theme file does not exist... (Qt5 application with third party libraries Marble)


I am trying to deploy a Qt5 application with a Marble plugin using dynamic linking. I have put the Qt5 libs, platform plugins and the marble libmarblewidget-qt5.so.22 with my executable application. The application works from an Ubuntu with marble installed on it. Now I am trying to run the application on an Ubuntu without marble installed. I am using the startup script from http://doc.qt.io/qt-5/linux-deployment.html to start my application. I am working on Ubuntu 16.04 32-bits.

When I run the startup script for the application (from terminal) I get this error message:

Map theme file does not exist: ""
Ignoring to load the following file since it doesn't look like a valid Marble plugin: "/boot/initrd.img-4.4.0-21-generic" 
Reason: "'/boot/initrd.img-4.4.0-21-generic' is not an ELF object"
Ignoring to load the following file since it doesn't look like a valid Marble plugin: "/boot/vmlinuz-4.4.0-21-generic" 
Reason: "'/boot/vmlinuz-4.4.0-21-generic' is not an ELF object"
Segmentation fault (core dumped)

Am I missing something, should I have something more than just the libmarblewidget-qt5.so.22?


Solution

  • Marble needs more than libmarblewidget-qt5.so to run properly. At least you need data for the map theme you want to show, and usually also some plugins. Have a look at the installation folder (CMAKE_INSTALL_PREFIX) after compiling Marble. You'll find plugins in e.g. lib64/marble/ and data in share/marble/data.

    The paths to plugins and data is compiled into libmarblewidget-qt5.so, but can be changed at runtime. To do so, use MarbleDirs::setMarbleDataPath() and MarbleDirs::setMarblePluginPath().

    In short, you have to

    The output you get (and likely also the segfault) happens because the compiled in plugin path does not exist on the target system, therefore Marble's plugin manager searches in / and tries to load the files it finds there.