在Linux上部署Qt

时间:2019-02-18 14:39:19

标签: c++ qt deployment

我正在尝试在不同的OS上部署Qt应用程序。

this帮助页面之后,Windows像超级按钮一样工作。 不幸的是,我在Linux上部署软件时遇到问题。 我已经阅读了this帮助页面,但似乎我不了解Plugins部分。

到目前为止我做了什么:

  • 我已经使用QMake编译了我的应用程序
  • 我已将所有动态链接的库(例如:libQt5Core.so.5libQt5Core.so.5.11.2libQt5Gui.so.5libQt5Gui.so.5.11.2 ...)添加到与我的应用程序相同的目录中(有些由于某种原因,其中的一部分是符号链接,但这不是这里的问题)
  • 我创建了一个名为platforms的子目录,并将libqxcb.so库放在那里
  • 我已经创建了一个bash脚本,就像我正在运行的教程中所建议的

编辑:以下错误已解决:

现在,我也不得不以及如何将哪些插件放入目录中。 我收到以下错误消息:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found. 
Available platform plugins are: xcb.
Aborted

根据this问题,我确实运行过ldd libqxcb.so,其中列出了以下库(以及更多库)

./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.11' not found (required by ./libqxcb.so)
linux-vdso.so.1 (0x00007ffd766c5000)
libQt5XcbQpa.so.5 => /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 (0x00007fd2a6181000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fd2a5f7f000)
libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fd2a5c69000)
libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007fd2a5a24000)
libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fd2a5770000)
libQt5Gui.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007fd2a5007000)
libQt5DBus.so.5 => /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5 (0x00007fd2a4d7d000)
libQt5Core.so.5 => /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007fd2a4632000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007fd2a43a6000)
...

我已经看到也需要库libQt5DBus.so.5。因此,我已将文件(以及libQt5DBus.so.5.11.2)复制到所有其他Qt库所在的platforms的父目录中。

但是,我仍然收到相同的错误消息。

是否可能与ldd的第一个输出有关,因为显示为“未找到”?

    ./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.11' not found (required by ./libqxcb.so)?

当我查看Windows部署时,我还有其他名为iconenginesimageformatsstylestranslations的文件夹吗?我还需要提供这些文件夹和库吗?如果是,我在哪里可以找到它们,如何检查需要哪一个?

编辑:新错误

我发现了第一个问题。这是由于一个被忽略的库:libQt5XcbQpa.so.5

但是现在我收到一个新错误:

Cannot mix incompatible Qt library (version 0x50602) with this library (version 0x50b02)

我注意到我要在其中安装应用程序的PC上安装了旧的Qt(5.6)。我已将库(5.11)复制到与应用程序相同的文件夹中,并且bash脚本调用:

LD_LIBRARY_PATH=$mydirname
export LD_LIBRARY_PATH

我认为此文件夹现在位于动态链接库的搜索路径中。但是,也有其他安装(5.6)。是否可以在文件夹中的库之前或之后找到这些库?我之所以问是因为5.6安装缺少例如QtCharts库,该库在我的文件夹中提供,但版本为5.11。这可能是问题的原因吗?

这是我的文件夹的图像:

folder structure

最终编辑

我知道了!问题是我有libQt5DBus.so而不是libQt5DBus.so.5。因此,它在我的目录中找到了版本5.11的所有库,但libQt5DBus.so库除外,该库是在版本5.6的旧安装中找到的。

感谢您的所有帮助。

0 个答案:

没有答案