Динамически ссылаться на Public \ Qt внутри океана - PullRequest
0 голосов
/ 29 января 2019

Использование Petrel 2016.1

Справочник по библиотекам: https://www.ocean.slb.com/~/media/files/testing%20plug%20ins/libraries/petrel_2016-1_3rd_party_libraries.html

Мой плагин использует Qt для окна и некоторые графики с qwt.Я хотел бы сослаться на библиотеки Qt, присутствующие в Petrel \ Public \ Qt, чтобы сэкономить место при развертывании приложения, а также потому, что политикой невозможно развернуть библиотеки, уже присутствующие в Petrel, как публичные библиотеки.Я успешно связался с той же версией Qt там.Проблема в том, что PluginPackager.exe не видит библиотек.Я попытался отредактировать PluginPackager.exe.config внутри каталога Petrel, чтобы включить Public \ Qt, скопировал его в папку Release, скопировал его в основную папку проекта и каждый каталог, в котором я могу подозревать, что PluginPackager.exe ищет этот файл, но ничегопохоже, что-то даёт.

Я скопировал dll-файлы Qt в папку Release, чтобы PluginPackager.exe мог их видеть и регистрировать плагин.Это работает, даже если впоследствии я удалю библиотеки Qt из папки Release.Буревестник загружает их из Public \ Qt.Проблема в том, что когда я пытаюсь открыть окно Qt, появляется сообщение о том, что Qt не удалось загрузить окна плагинов.

Я подумал, что это связано с qwindows.dll, который находится внутри Public \ Qt \ plugins \платформ.Если я установлю переменную окружения QT_QPA_PLATFORM_PLUGIN_PATH в C: .. \ petrel ... \ Public \ Qt \ plugins \ platform, это будет работать нормально.Я пытался использовать addLibraryPath () из QApplication, но безуспешно.

Я думаю, у нас есть все, что нам нужно, в Public \ Qt, но по какой-то причине Petrel не находит его.Тогда два вопроса:

1 - Как сделать PluginPackager, чтобы увидеть все библиотеки внутри Public \ Qt?

2 - Как заставить мое приложение найти qwindows.dll?

Плагин имеет код на C #, C ++ cli и C ++

EDIT 1: Хорошо, для Q.2 я нашел решение методом проб и ошибок.

QString path = QDir::currentPath();
QString finalPath = QDir(path).filePath("Public/Qt/plugins");
QApplication::addLibraryPath(finalPath);

Это добавит dir плагинов к пути поиска qt lib и сделает свое дело.Я надеюсь, что смогу выполнить развертывание, используя это.

EDIT 2: Для Q.1

Теперь я понимаю, что PluginPackager видит вещи только в папке Extensions.Проблема была в том, что, на мой взгляд, имя папки Public вводит в заблуждение.Это привело меня к мысли, что все библиотеки внутри этой папки могут свободно использоваться разработчиками.В путеводителе «Океан» говорится, что все библиотеки, кроме тех, которые находятся внутри расширений, считаются внутренними библиотеками:

PluginPackager.exe предполагает, что файлы в дереве установочных каталогов Petrel, кроме файлов в папке расширений, являются внутренними.библиотеки.

Ну и зачем называть папку Public, если все библиотеки внутри нее внутренние?Это действительно сбивает с толку.Кроме того, библиотеки Slb.Ocean внутри общих папок в порядке, остальные нет?Поскольку PluginPackager.exe.config содержит Public \, но не содержит папок внутри него.

...