gpt4 book ai didi

c++ - Qt、Linux、GCC : -Wl, -rpath=$ORIGIN 不适用于平台插件 xcb

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:51 25 4
gpt4 key购买 nike

我试图通过将所需的 .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.solibQt5Core.so 等。它们位于我的应用程序路径中,但我怀疑 libqxcb.so 不知何故无法在那里找到它们,因此它失败了。有没有可能我可以解决这个问题?

如果我使用以下脚本来运行应用程序,它就可以运行(注意:Ct 是可执行文件的名称):

#!/bin/sh

DIR="$( cd "$( dirname "$0" )" && pwd )"
cd $DIR
LD_LIBRARY_PATH=LD_LIBRARY_PATH:. ./Ct

但我想在不使用脚本运行应用程序的情况下实现这一点。

最佳答案

qt 部署文档对此没有特别帮助。

解决此问题的关键是当您查看 libqxcb.so 的 ldd 输出时,它位于 lib 文件夹中。

libQt5Core.so.5 => <*>/plugins/platforms/./../../lib/libQt5Core.so.5 (0x00007f5f8374a000)

因此目录结构应该如下:

app
|-- lib
| |-- libQt5Core.so.5
| |-- libQt5Gui.so.5
| |-- libQt5DBus.so.5
| |-- libQt5XcbQpa.so.5
| |-- libicui18n.so.56
| |-- libicuuc.so.56
| `-- libicudata.so.56
|-- qt.conf
|-- app_exec
`-- plugins
`-- platforms
`-- libqxcb.so

在 project.pro 中为 lib 文件夹设置应用程序 rpath:

unix:!mac{  
QMAKE_LFLAGS += "-Wl,-rpath,\'\$$ORIGIN/lib\'"
}

最后,您需要为您的应用设置 qt.conf 以便能够找到插件(默认情况下从平台文件夹中查找):

[Paths]
Prefix=./
Libraries=lib
Plugins=plugins

关于c++ - Qt、Linux、GCC : -Wl, -rpath=$ORIGIN 不适用于平台插件 xcb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36117748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com