Я использую QtCreator + mingw.Не удается загрузить sqlite.dll с QSQLITE2 Qt-плагином
Я скомпилировал плагин 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.
Какие-либо намеки, что может быть неправильно? Что еще я могу проверить?
EDIT:
Я только что выполнил тест: Я удалил my.dll
из плагинов, чтобы избежать загрузки вообще. Затем я добавил код main.cpp
:
QSqlDatabase::addDatabase("QSQLITE2", ":memory:");
Дело в том, что он также упал, с тем же трассировки стека (в этой самой линии, я отлажена его). Таким образом, я думаю, что что-то не так с плагином sqlite2 Qt, но я все еще не могу сказать, что. Я искал для другого sqlite.dll
, я только что загрузил его с сайта sqlite.org: http://www.sqlite.org/sqlitedll-2_8_17.zip - так что это официальная сборка, но это тот же самый файл, который у меня был, и он тоже терпит неудачу.
Еще одно примечание: sqlite.h определяет 'extern const char sqlite_encoding []', который не определен в sqlite.dll (я не смог скомпилировать плагин QSQLITE2), поэтому мне нужно отредактировать файл 'qsql_sqlite2.cpp' и добавить line: 'const char sqlite_encoding [] =" UTF-8 ";' - тогда плагин Qt скомпилирован правильно. Я не уверен, что это важно, но просто хотелось быть точным. – Googie