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)