Я пытаюсь развернуть приложение C++, скомпилированное с gcc в Linux, поместив необходимые .so-файлы в исполняемый каталог. Я добавил флаг linker -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», он даст вам ответ на ваше подозрение в отношении пропущенных библиотек. – Arseniy
Я уже делал, когда создавал вопрос, и, как сказано, он не может их найти. Вопрос в том, почему он не находит их и как я могу это исправить (кроме запуска приложения с этим скриптом). – user1488118