QPluginLoader не может найти модуль

Я создал плагин для своего приложения. Если я не использую библиотеку GDAL в своем коде, мое приложение может использовать этот плагин (QPlugin загружает его), и он работает нормально. Но если я использую классы из библиотеки GDAL QPluginLoader не могу загрузить его и errorstring() метод возвращает ../serverplugin.dll Can't find module,

Есть два экспортируемых символа qt_plugin_instance а также qt_plugin_query_verification_data в плагине DLL (я нашел их с помощью ходунка Dependency). QPluginLoader использует QLibrary класс внутри для взаимодействия с символами C, экспортируемыми в DLL. Если я не использую GDAL, у меня есть только два экспортированных символа во всех плагинах в начале. Когда я использую GDAL, эти два символа перемещаются в конце большого списка экспортируемых символов. Возможно, эти два экспортируемых символа должны быть в начале.

Что я делаю неправильно?

1 ответ

У меня была такая же проблема с QPluginLoader. В двух словах, как я решил это: я создаю библиотеку плагинов, скажем, lib1.dll, которые используют некоторые вещи из lib2.dll. В моем приложении я пытаюсь загрузить lib1 через QPluginLoader.

QPluginLoader loader( adaptersDir.absoluteFilePath(fileName) );
AdapterInterface* adapterIface = qobject_cast<AdapterInterface*>(loader.instance());

В этом случае loader.instance() возвращает 0. Решение было скопировать lib2.dll в папку приложения, потому что приложение использует его для правильной загрузки плагина lib1.

QT_BEGIN_NAMESPACE
#define Plugin_iid "Plugin"
Q_DECLARE_INTERFACE(PluginInterface,Plugin_iid)
QT_END_NAMESPACE 

Q_PLUGIN_METADATA(IID "PluginInterface" FILE "Plugin.json")
Q_INTERFACES(PluginInterface)
Другие вопросы по тегам