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

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

我正在尝试使用动态链接部署带有 Marble 插件的 Qt5 应用程序。我已将 Qt5 库、平台插件和大理石 libmarblewidget-qt5.so.22 放入我的可执行应用程序中。该应用程序在 Ubuntu 上运行,上面安装了大理石。现在,我正在尝试 运行 在 Ubuntu 上安装应用程序,但没有安装大理石。我正在使用 http://doc.qt.io/qt-5/linux-deployment.html 中的启动脚本来启动我的应用程序。我正在研究 Ubuntu 16.04 32 位。

当我 运行 应用程序的启动脚本(从终端)时,我收到此错误消息:

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)

我是否遗漏了什么,除了 libmarblewidget-qt5.so.22 之外,我还应该拥有其他东西吗?

Marble 需要超过 libmarblewidget-qt5.so 到 运行 才能正常使用。至少你需要你想要显示的地图主题的数据,通常还需要一些插件。编译 Marble 后查看安装文件夹 (CMAKE_INSTALL_PREFIX)。你会在例如lib64/marble/share/marble/data.

中的数据

插件和数据的路径被编译到 libmarblewidget-qt5.so,但可以在 运行 时更改。为此,请使用 MarbleDirs::setMarbleDataPath()MarbleDirs::setMarblePluginPath().

总之,你必须

  • 将全部或部分插件发送到您选择的文件夹
  • 致电MarbleDirs::setMarblePluginPath("/your/plugins/install/folder");
  • 将全部或部分数据发送到您选择的另一个文件夹
  • 致电MarbleDirs::setMarbleDataPath("/your/data/install/folder");

你得到的输出(也可能是段错误)是因为编译的插件路径在目标系统上不存在,因此 Marble 的插件管理器在 / 中搜索并尝试加载它找到的文件那里。