【发布时间】:2016-03-20 18:25:03
【问题描述】:
我正在尝试通过将所需的 .so 文件放入可执行目录中,在 Linux 上部署使用 gcc 编译的 C++ 应用程序。我添加了链接器标志-Wl,-rpath=$ORIGIN,以便程序可以在它所在的目录中查找链接库。只要找到与我的可执行文件直接链接的所有库(通过 ldd 检查),此方法就可以工作。
但是,当我尝试启动应用程序时,我收到以下错误:
This application failed to start because it could not find or load the Qt platform plugin "xcb".
Available platform plugins are: linuxfb, minimal, offscreen, xcb.
Reinstalling the application may fix this problem.
平台插件位于文件夹./platforms(相对于可执行路径)。那些显然是由 Qt 加载的其他一些共享对象文件,其中之一是 libqxcb.so。现在,问题是该文件再次依赖于libQt5Gui.so、libQt5Core.so 等。它们位于我的应用程序路径中,但我怀疑libqxcb.so 不知何故无法在那里找到它们,因此它失败了。有没有可能我可以解决这个问题?
如果我使用以下脚本运行应用程序,它可以工作(注意:Ct 是可执行文件的名称):
#!/bin/sh
DIR="$( cd "$( dirname "$0" )" && pwd )"
cd $DIR
LD_LIBRARY_PATH=LD_LIBRARY_PATH:. ./Ct
但我想实现这一点,而不必使用脚本来运行应用程序。
【问题讨论】:
-
通过'ldd'检查你的'libqxcb.so',它会给你一个关于你对错过图书馆的怀疑的答案。
-
我在创建问题时已经这样做了,并且如上所述无法找到它们。问题是为什么它找不到它们以及我如何解决这个问题(除了使用该脚本启动应用程序)。