Я использую QtCreator+mingw.
Я скомпилировал плагин QSQLITE2. Я просто ввел каталог плагинов в исходный код Qt:
c:\Qt\Qt5.2.0\5.2.0\Src\qtbase\src\plugins\sqldrivers\sqlite
и я построил его с помощью моего sqlite 2.8.17, который у меня есть локально (как dll и заголовок):
qmake "LIBS+=-Lc:\projects\lib -lsqlite" "INCLUDEPATH+=c:\projects\include"
make
make install
Все строится нормально.
Теперь у меня есть другая DLL (также реализованная как плагин Qt, пользовательский), который использует плагин QSQLITE2 Qt. Моя собственная dll также связана с sqlite.dll. Так это выглядит так:
my.dll depends on sqlite.dll
%QT_PLUGINS%\qsqlite2d.dll depends on sqlite.dll
my.dll uses qsqlite2d.dll through Qt's plugin engine
myApp.exe loads my.dll
Проблема в том, что мое приложение не может загрузить my.dll из-за invalid location access
или чего-то подобного. Я не знаю никаких подробностей, и в этом проблема.
sqlite.dll
находится в каталоге приложения при его запуске.
Когда я запускаю приложение в режиме отладки, оно падает в каком-то файле сборки, но в трассировке стека я вижу, что это где-то внутри sqlite.dll, в символе sqlite_step. Это все, что я знаю.
Примечание 1) У меня есть другая подключаемая dll, my3.dll
, которая использует подключаемый модуль QSQLITE (для sqlite3) и связана с sqlite3.dll
, и эта загружается нормально. Я также скомпилировал плагин QSQLITE (даже тот, который был предоставлен с Qt, потому что Qt статически связан с sqlite3, и я хотел, чтобы он динамически связывался с sqlite3.dll
).
Примечание 2) Оба плагина прекрасно работают под Linux.
Любые подсказки, что может быть не так? Что еще я могу проверить?
ИЗМЕНИТЬ:
Я только что провел тест: я удалил my.dll
из плагинов, чтобы вообще не загружать его. Затем я добавил код в main.cpp
:
QSqlDatabase::addDatabase("QSQLITE2", ":memory:");
Дело в том, что он тоже вылетал, с той самой трассировкой стека (на этой самой строчке я его отлаживал). Таким образом, я думаю, что с плагином sqlite2 Qt что-то не так, но я до сих пор не могу сказать, что именно. Я искал другие sqlite.dll
, я только что скачал один из sqlite.org: http://www. sqlite.org/sqlitedll-2my3.dll
17.zip - так что это официальная сборка, но это точно такой же файл, который был у меня, и он также не работает.
extern const char sqlite_encoding[]
, который не определен в sqlite.dll (я не смог скомпилировать плагин QSQLITE2), поэтому мне нужно отредактировать файлqsql_sqlite2.cpp
и добавить строку:const char sqlite_encoding[] = "UTF-8";
- тогда плагин Qt скомпилирован правильно. Я не уверен, что это актуально, но просто хотел быть точным. - person Googie   schedule 04.02.2014