错误:地图主题文件不存在..(带有第三方库Marble的Qt5应用程序)



我正在尝试使用动态链接部署一个带有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");

您得到的输出(可能还有segfault)是因为目标系统上不存在编译的插件路径,因此Marble的插件管理器在/中进行搜索,并尝试加载在那里找到的文件。

最新更新