В настоящее время у меня возникают трудности с очень простым приложением запуска, которое предназначено для отображения веб-страницы и имеет несколько кнопок для запуска игры. Когда вы нажимаете ссылку внутри пусковой установки, она предназначена для просто запуска вашего веб-браузера по умолчанию со ссылкой, а не для приема и обработки запросов навигации.
Однако при запуске через Steam ссылки не могут открываться в новом веб-браузере. Точное поведение зависит от среды, у меня были отчеты о копиях тэгов gvfs-open
и xdg-open
, хотя в моей среде он просто дает указание мыши, что firefox открывается на долю секунды и ничего не делает (в том числе никаких процессов, запущенных на все в соответствии с strace, возможно, имеет какое-то отношение к системе передачи сообщений KDE, я не знаю). Довольно неприятно, есть также сообщения, что он просто отлично работает. И поэтому у меня возникла проблема, затрудняющая точный вопрос в результате.
Мне удалось сузить проблемы до Steam, изменив LD_LIBARRY_PATH исполняемого файла на использование платформ Steam Linux. Я связал все библиотеки, необходимые для запуска с помощью пусковой установки.
Вот минимальное воспроизводимое руководство:
main.cpp
#include <QApplication>
#include <QWebFrame>
#include <QDesktopServices>
#include <QNetworkRequest>
#include <QMessageBox>
#include <QWebView>
class WebPage : public QWebPage {
public:
bool acceptNavigationRequest(QWebFrame*, const QNetworkRequest &request, NavigationType) {
QDesktopServices::openUrl(request.url());
return false;
}
};
class WebView : public QWebView {
public:
QWebView* createWindow(QWebPage::WebWindowType) {
WebView* res = new WebView;
WebPage* page = new WebPage;
res->setPage(page);
return res;
}
};
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
WebView v;
v.load(QUrl("http://example.com/"));
v.show();
return a.exec();
}
launcher.pro
QT += core gui network webkitwidgets widgets
TARGET = launcher
TEMPLATE = app
SOURCES = main.cpp
Вам также потребуется скопировать и объединить следующие библиотеки (стандартное развертывание Qt):
libQt5Widgets.so libQt5Gui.so libQt5Core.so libQt5Network.so libQt5WebKitWidgets.so libQt5WebKit.so libQt5MultimediaWidgets.so libQt5OpenGL.so libQt5PrintSupport.so libQt5Multimedia.so libQt5Sensors.so libQt5Quick.so libQt5Qml.so libQt5Sql.so libQt5Positioning.so libQt5DBus. поэтому libicui18n.so libicuuc.so libicudata.so libssl.so libcrypto.so libstdС++. поэтому libgcc_s.so
И в подкаталоге, называемом платформами:
libqxcb.so
И наконец, script, чтобы связать его:
launch_launcher.sh
#!/bin/sh -e
cd "$(dirname "$0")"
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./launcher
Наконец, установите пар и установите его LD_LIBRARY_PATH как свой собственный, и экспортируйте его, и запустите launch_launcher.sh(эти точные пути зависят от вашей установки пара).
По сути, если вы удаляете $LD_LIBRARY_PATH
из start_launcher script, чтобы строка читала только LD_LIBRARY_PATH=. ./launcher
, тогда работают ссылки. Однако с $LD_LIBRARY_PATH
включенными ссылками не работает. Нам нужно $LD_LIBRARY_PATH
работать, чтобы использовать библиотеки платформы Steam Linux (что заставляет игру работать.)
Какой лучший способ устранить эту проблему? Как я могу найти ответственную библиотеку и исключить ее или иным образом решить эту проблему?